В Руби я сделал:
"string1::string2".split("::")
В Scala я не могу найти, как split
использовать строку, а не один символ.
В Руби я сделал:
"string1::string2".split("::")
В Scala я не могу найти, как split
использовать строку, а не один символ.
В вашем примере это не имеет значения, но метод String#split
в Scala фактически принимает String
, представляющий регулярное выражение. Поэтому обязательно избегайте определенных символов по мере необходимости, например, например. в "a..b.c".split("""\.\.""")
или, чтобы сделать этот факт более очевидным, вы можете вызвать метод split для RegEx
: """\.\.""".r.split("a..b.c")
.
REPL даже проще, чем Stack Overflow. Я просто вставил ваш пример как есть.
Welcome to Scala version 2.8.1.final (Java HotSpot Server VM, Java 1.6.0_22).
Type in expressions to have them evaluated.
Type :help for more information.
scala> "string1::string2".split("::")
res0: Array[java.lang.String] = Array(string1, string2)
"aaaaa".split("a")
=> List("", "", "", "", "", "")
- что для большинства целей не дает никакой полезной информации. Скорее интерпретировать как пустой. 16.09.2015 Эта строка Ruby должна работать так же, как и в Scala, и возвращать Array[String]
.
Если вы посмотрите на Реализация Java вы видите, что параметр String#split
будет фактически скомпилирован в регулярное выражение.
С "string1::string2".split("::")
проблем нет, потому что ":" — это просто символ в регулярном выражении, но, например, "string1|string2".split("|")
не даст ожидаемого результата. "|" — специальный символ чередования в регулярном выражении.
scala> "string1|string2".split("|")
res0: Array[String] = Array(s, t, r, i, n, g, 1, |, s, t, r, i, n, g, 2)
\Q
и\E
вместо индивидуального экранирования. Просто добавьте\Q
в начало (или\\Q
, если нужно) и\E
в конец. 02.04.2011var
(константе)? 04.06.2014scala.util.matching.Regex.quote
или эквивалентный метод Java. 04.06.2014java.util.regex.Pattern.quote(str)
будет делать это с произвольным строковым литералом (окруженным \Q и \E). 05.06.2014