Scala: разделить строки - PullRequest
       1

Scala: разделить строки

2 голосов
/ 24 октября 2010

Название звучит немного безумно, но с функцией * для java.lang.String в Scala ("a" * 3 = "aaa"), почему у нас нет функции /, чтобы "aaa" / "a" = 3?

Cheers
Парса

Ответы [ 4 ]

6 голосов
/ 24 октября 2010

Мне нравится думать.Я отвечу на вопрос: почему нет функции, когда у нас есть функция +?

implicit def strDivider(s:String) = new {
  def /(q:String): Int = s.grouped(q.length).takeWhile(_ == q).size
}

scala> "aaa" / "a"
res0: Int = 3

scala> "abc" / "x"
res1: Int = 0

scala> "aaa" / "aa"
res2: Int = 1
2 голосов
/ 25 октября 2010

Вы также можете разделить String с на Int с:

def divide(s: String, i: Int): (String,String) = {
  require(i>0)
  val Pattern = ("(.+)" + """\1""" * i + "(.*)").r
  val Pattern(q, r) = s
  (q,r)
}

assert(divide("aaa", 3) == ("a", ""))
assert(divide("aaaa", 3) == ("a", "a"))
assert(divide("abababc", 3) == ("ab", "c"))
assert(divide("abc", 1) == ("abc", ""))
assert(divide("foobar", 3) == ("", "foobar"))
2 голосов
/ 24 октября 2010

Такая операция кажется немного странной.Что бы это значило, чтобы разделить "abc" / "x"?Функция String.split() кажется здесь более универсальной и полезной.

0 голосов
/ 24 октября 2010

конструкция, подобная "a" * 3, используется для создания разделителей при печати вывода на стандартный вывод, поэтому вы можете сделать "-" * 72 вместо ввода 72 дефисов в строке.Я не понимаю, какую выгоду вы могли бы получить от деления.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...