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

Метод split() в Java не работает с точкой (.)

Я подготовил простой фрагмент кода, чтобы отделить ошибочную часть от моего веб-приложения.

public class Main {

    public static void main(String[] args) throws IOException {
        System.out.print("\nEnter a string:->");
        BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
        String temp = br.readLine();

        String words[] = temp.split(".");

        for (int i = 0; i < words.length; i++) {
            System.out.println(words[i] + "\n");
        }
    }
}

Я тестировал его при создании веб-приложения JSF. Я просто хочу знать, почему в приведенном выше коде temp.split(".") не работает. Заявление,

System.out.println(words[i]+"\n"); 

ничего не отображает на консоли означает, что он не проходит цикл. Когда я меняю аргумент метода temp.split() на другие символы, он работает как обычно. В чем может быть проблема?

28.10.2011

  • Убежать от этого. Split работает с регулярным выражением 29.10.2011
  • Да, это по умолчанию для регулярных выражений в Java? 29.10.2011

Ответы:


1

java.lang.String.split разбивается на регулярные выражения , а . в регулярном выражении означает "любой символ".

Попробуйте temp.split("\\.").

28.10.2011

2

документация по split() говорит:

Разбивает эту строку на совпадения заданного регулярное выражение.

(Выделение мое.)

Точка — это специальный символ в синтаксисе регулярных выражений. Используйте Pattern.quote() в параметре функции split(), если вы хотите, чтобы разделение выполнялось по образцу буквальной строки:

String[] words = temp.split(Pattern.quote("."));
28.10.2011
  • Это делает это! А Pattern.quote(..) делает ваш код более читабельным. 20.04.2021

  • 3

    Пытаться:

    String words[]=temp.split("\\.");
    

    Метод:

    String[] split(String regex) 
    

    "." зарезервированный символ в регулярном выражении

    28.10.2011

    4

    Метод принимает регулярное выражение, а не строку, а точка в регулярных выражениях имеет особое значение. Убегайте вот так split("\\."). Вам нужна двойная обратная косая черта, вторая экранирует первую.

    28.10.2011

    5

    \\. - это простой ответ. Вот простой код для вашей помощи.

    while (line != null) {
        //             
        String[] words = line.split("\\.");
        wr = "";
        mean = "";
        if (words.length > 2) {
            wr = words[0] + words[1];
            mean = words[2];
    
        } else {
            wr = words[0];
            mean = words[1];
        }
    }
    
    05.02.2014

    6

    Это работает нормально. Вы читали документация? Строка преобразуется в регулярное выражение.

    . — это специальный символ, соответствующий всем введенным символам.

    Как и в случае любого специального символа регулярного выражения, вы экранируете с помощью \. Вам нужен дополнительный \ для экранирования строки Java.

    28.10.2011
    Новые материалы

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

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

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

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

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

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

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