Какой шаблон регулярного выражения мне нужно будет передать методу String.split()
, чтобы разделить строку на массив подстрок, используя пробел, а также следующие символы в качестве разделителей. (" ! ", " , " , " ? " , " . " , " \ " , " _ " , " @ " , " ' ")
, и это также может быть сочетание вышеуказанных символов с пробелами. Я пытался что-то вроде этого:Как разбить строку, используя разделители в java?
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.util.*;
class StringWordCount {
public static void main(String[] args) throws IOException {
BufferedReader bufferedReader = new BufferedReader(new IputStreamReader(System.in));
String string = bufferedReader.readLine();
String delimiter = "[,\\s]+|\\[!\\s]+|\\[?\\s]+|\\[.\\s]+|\\[_\\s]+|\\[_\\s]+|\\['\\s]+|\\[@\\s]+|\\!|\\,|\\?|\\.|\\_|\\'|\\@";
String[] words = string.split(delimiter);
System.out.println(words.length);
for(int i = 0; i<words.length; i++) {
System.out.println(words[i]);
}
}
}
Приведенный выше код генерирует только правильный выход для некоторых testcases, в других случаях, он не будет генерировать правильный one.For например, Рассмотрим ниже строки, где он не смог получить ожидаемый результат.
Он генерирует вывод:
23
Hello
thanks
for
attempting
this
problem
Hope
it
will
help
you
to
learn
java
Good
luck
and
have
a
nice
day
Вместо этого один:
21
Hello
thanks
for
attempting
this
problem
Hope
it
will
help
you
to
learn
java
Good
luck
and
have
a
nice
day
Как вы можете видеть на первом выходе, его оставляя пространство на комбинации " ! "
и [space]
а разделителем для вышеуказанной комбинации является \\[!\\s]
, правильно?
Возможный дубликат [Как разбить строку на Java] (http://stackoverflow.com/questions/3481828/how-to-split-a-string-in-java) – Tushar
@Tushar и другие: вопрос вы называете это «дубликатом», опубликованным кем-то, кто не знал о 'split()'. Этот вопросник знает о 'split' и испытывает трудности с правильной настройкой разделителя. Это не дубликат. – ajb
StringTokenizer более подходит по данному сценарию. хотя он заменен методом Сканера и разделения. –