Маркируйте проблему в Java с разделителем “.”

Я должен разделить текст с помощью разделителя ". ". Например, я хочу эту строку:

Washington is the U.S Capital. Barack is living there.

Быть сокращенным в две части:

Washington is the U.S Capital. 
Barack is living there.

Вот мой код:

// Initialize the tokenizer
StringTokenizer tokenizer = new StringTokenizer("Washington is the U.S Capital. Barack is living there.", ". ");
 while (tokenizer.hasMoreTokens()) {
      System.out.println(tokenizer.nextToken());

}

И вывод, к сожалению:

Washington
is
the
U
S
Capital
Barack
is
living
there

Кто-то может объяснить, что продолжается?

5
задан polygenelubricants 6 June 2010 в 19:28
поделиться

3 ответа

Не использовать StringTokenizer ; это унаследованный класс. Вместо этого используйте java.util.Scanner или просто String.split .

    String text = "Washington is the U.S Capital. Barack is living there.";
    String[] tokens = text.split("\\. ");
    for (String token : tokens) {
        System.out.println("[" + token + "]");
    }

Это печатает:

[Washington is the U.S Capital]
[Barack is living there.]

Обратите внимание, что split и Scanner основаны на "регулярных выражениях" (регулярные выражения), а с . - это специальный «метасимвол» регулярного выражения, его нужно экранировать с помощью \ . В свою очередь, поскольку \ сам по себе является escape-символом для строковых литералов Java, вам необходимо написать «\\.» в качестве разделителя.

Это может показаться сложным, но на самом деле это не так. split и Сканер намного превосходит StringTokenizer , а регулярное выражение не так уж сложно подобрать.

Учебники по регулярным выражениям

Связанные вопросы

Ссылки API

  • java.util.StringTokenizer
    • StringTokenizer - это устаревший класс, который сохранен по соображениям совместимости, хотя его использование не рекомендуется в новом коде. Рекомендуется, чтобы любой, кто ищет эту функциональность, использовал вместо этого метод split для String или пакет java.util.regex .
  • java.util.Scanner
  • String [] String.split
    • Разбивает эту строку вокруг совпадений с заданным регулярным выражением.

Но что пошло не так?

Проблема в том, что StringTokenizer принимает каждый символ в строке разделителя как отдельные разделители, то есть НЕ весь Сама строка .

Из API:

StringTokenizer (String str, String delim) : создает токенизатор строки для указанной строки. Символы в аргументе delim являются разделителями для разделения токенов. Сами символы-разделители не будут рассматриваться как токены.

31
ответ дан 18 December 2019 в 05:36
поделиться

Попробуйте удалить пробел после точки в разделителе. Используйте это вместо этого.

StringTokenizer tokenizer = new StringTokenizer("Washington is the U.S Capital. Barack is living there.", ".");
0
ответ дан 18 December 2019 в 05:36
поделиться

Конструктор StringTokenizer принимает в качестве разделителей разделитель «.», Который соответствует точке или пробелу.

1
ответ дан 18 December 2019 в 05:36
поделиться
Другие вопросы по тегам:

Похожие вопросы: