什麼正則表達式模式,我需要傳遞給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]);
}
}
}
上面的代碼只生成了一些測試用例正確的輸出,在其他情況下,也不會產生正確的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更合適。儘管它已被掃描器和拆分方法所取代。 –