3 回答

TA貢獻1818條經驗 獲得超11個贊
Try str.split("\\W+")
It 表示 1 個或多個非單詞字符
\W 只匹配 1 個字符。所以它在 處中斷,然后在空格處再次中斷 這就是為什么它會返回一個額外的空字符串。\W+ 將匹配 ', ' 作為一個,所以它只會中斷一次,所以你只會取回令牌。(它適用于多個令牌,而不僅僅是兩個。所以 'hello, world, again' 會給你 [hello,world,again]。

TA貢獻1821條經驗 獲得超5個贊
嘗試這個
Scanner inputter = new Scanner(System.in);
System.out.print("Please enter your thoughts : ");
final String words = inputter.nextLine();
final String[] tokens = words.split("\\W+");
Arrays.stream(tokens).forEach(System.out::println);

TA貢獻1816條經驗 獲得超6個贊
如果您使用,.split("\\W")
如果出現以下情況,您將得到空項目:
非單詞字符出現在字符串的開頭
非字字符連續出現,一個接一個
\W
匹配 1 個非字字符,打斷字符串,然后下一個非字字符再次打斷它,產生空字符串。
有兩條出路。
要么刪除開頭的所有非單詞字符,然后拆分為\W+
:
String?tokens[]?=?str.replaceFirst("^\\W+",?"").split("\\W+");
或者,將字符塊與\w+
模式匹配:
Pattern p = Pattern.compile("\\w+");
Matcher m = p.matcher("? ?abc=-=123");
List<String> tokens = new ArrayList<>();
while(m.find()) {
? ? tokens.add(m.group());
}
System.out.println(tokens)
添加回答
舉報