我正在尝试执行以下操作:
String[] Res = Text.split("[\\p{Punct}\\s]+");
但是,我总是在他们面前用空格说几句话。 如何在不将空格和其他标点符号作为单词本身的一部分的情况下解析句子?
答案 0 :(得分:3)
由于您没有提供可以重现问题的示例输入,我只能猜测。我不明白为什么你提供的正则表达式应该在结果中留空格,除非你使用非ASCII空格或标点字符。同时\\p{Punct}
和\\s
的原因是POSIX字符类限于ASCII,例如\\s
与\u00a0
不匹配。如果您的问题是非ASCII标点符号和空白字符,请使用[\\p{IsPunctuation}\\p{IsWhite_Space}]+
。
实施例
String text="Some\u00a0words stick together⁈";
String[] res1 = text.split("[\\p{Punct}\\s]+");
System.out.println(Arrays.toString(res1));
String[] res2 = text.split("[\\p{IsPunctuation}\\p{IsWhite_Space}]+");
System.out.println(Arrays.toString(res2));
将产生:
[Some words, stick, together⁈]
[Some, words, stick, together]
答案 1 :(得分:2)
在使用它们之前,您需要trim()
数组中的所有字符串。这将消除所有前导和尾随空格。
str = str.trim();
在你的情况下
for(String str : Res) {
str = str.trim();
// use str now, without any white spaces
}
如果您还需要保留标点符号,则需要使用StringTokenizer
,其中包含保留分隔符的boolean
值。
答案 2 :(得分:1)
用于移除尾随或引导任何可能使用的空间
String str=" java ";
str = str.trim();