Метод 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() другим символам, он работает нормально, как обычно. В чем может быть проблема?

Ответ 1

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

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

Ответ 2

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

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

(Подчеркните мой.)

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

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

Ответ 3

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

Ответ 4

Try:

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

Метод:

String[] split(String regex) 

"" является зарезервированным char в regex

Ответ 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];
    }
}

Ответ 6

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

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

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

Ответ 7

    private String temp = "mahesh.hiren.darshan";

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

  Log.e("1", ""+s_temp[0]);