3 回答
TA贡献1818条经验 获得超11个赞
Try str.split("\\W+")
It 表示 1 个或多个非单词字符
\W 只匹配 1 个字符。所以它在 处中断,然后在空格处再次中断 这就是为什么它会返回一个额外的空字符串。\W+ 将匹配 ', ' 作为一个,所以它只会中断一次,所以你只会取回令牌。(它适用于多个令牌,而不仅仅是两个。所以 'hello, world, again' 会给你 [hello,world,again]。
TA贡献1821条经验 获得超4个赞
尝试这个
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)
添加回答
举报