Я должен разделить текст с помощью разделителя ". "
. Например, я хочу эту строку:
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
Кто-то может объяснить, что продолжается?
Не использовать 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
, а регулярное выражение не так уж сложно подобрать.
java.util.StringTokenizer
StringTokenizer
- это устаревший класс, который сохранен по соображениям совместимости, хотя его использование не рекомендуется в новом коде. Рекомендуется, чтобы любой, кто ищет эту функциональность, использовал вместо этого метод split
для String
или пакет java.util.regex
. java.util.Scanner
String [] String.split
Проблема в том, что StringTokenizer
принимает каждый символ в строке разделителя как отдельные разделители, то есть НЕ весь Сама строка
.
Из API:
StringTokenizer (String str, String delim)
: создает токенизатор строки для указанной строки. Символы в аргументеdelim
являются разделителями для разделения токенов. Сами символы-разделители не будут рассматриваться как токены.
Попробуйте удалить пробел после точки в разделителе. Используйте это вместо этого.
StringTokenizer tokenizer = new StringTokenizer("Washington is the U.S Capital. Barack is living there.", ".");
Конструктор StringTokenizer принимает в качестве разделителей разделитель «.», Который соответствует точке или пробелу.