Nano Hash - криптовалюты, майнинг, программирование

Как разбить строку на строку в Scala

В Руби я сделал:

"string1::string2".split("::")

В Scala я не могу найти, как split использовать строку, а не один символ.

02.04.2011

Ответы:


1

В вашем примере это не имеет значения, но метод String#split в Scala фактически принимает String, представляющий регулярное выражение. Поэтому обязательно избегайте определенных символов по мере необходимости, например, например. в "a..b.c".split("""\.\.""") или, чтобы сделать этот факт более очевидным, вы можете вызвать метод split для RegEx: """\.\.""".r.split("a..b.c").

02.04.2011
  • О да. Я был убежден, что ему нужно Regex или Char, а не String, поэтому он продолжал жаловаться. 02.04.2011
  • Я предлагаю использовать \Q и \E вместо индивидуального экранирования. Просто добавьте \Q в начало (или \\Q, если нужно) и \E в конец. 02.04.2011
  • @DanielC.Sobral Отличная идея - есть ли способ экранировать строку, хранящуюся в var (константе)? 04.06.2014
  • @Rubistro Вы можете использовать scala.util.matching.Regex.quote или эквивалентный метод Java. 04.06.2014
  • @DanielC.Sobral Я обнаружил, что java.util.regex.Pattern.quote(str) будет делать это с произвольным строковым литералом (окруженным \Q и \E). 05.06.2014

  • 2

    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)
    
    02.04.2011
  • это должен быть ответ. Стратегия Морица по созданию регулярных выражений работает, но это простое решение лучше. 01.01.2013
  • этот ответ фактически отвечает на вопрос; принятый в настоящее время ответ описывает теорию, которая может работать, но не описывает фактический ответ на заданный вопрос. 12.08.2014
  • Есть проблема с разделением: когда вы пытаетесь ::.split(::) вы получаете Nil, но должны List(,) 22.12.2014
  • @Vitamon Если бы это было так, то "aaaaa".split("a") => List("", "", "", "", "", "") - что для большинства целей не дает никакой полезной информации. Скорее интерпретировать как пустой. 16.09.2015

  • 3

    Эта строка Ruby должна работать так же, как и в Scala, и возвращать Array[String].

    02.04.2011

    4

    Если вы посмотрите на Реализация 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)
    
    21.12.2015
    Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..