我有下面的代码,但看起来它以错误的方式解析中文的关键字。我怎么能改变它?
输出:
keyword:test keyword:中 keyword:文 keyword:U keyword:I keyword:素 keyword:材
应该在下面:
keyword:test keyword:中文 keyword:UI keyword:素材
这是我的代码:
public class test {
public static final Pattern KEYWORDS_REGEX =
Pattern.compile("[^\\s,](?:[^,]+[^\\s,])?");
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
String keywords = "test, 中文, UI, 素材";
Matcher matcher = KEYWORDS_REGEX.matcher(keywords);
while (matcher.find()) {
String s = matcher.group();
System.out.println("keyword:" +s);
}
}
谢谢!
答案 0 :(得分:2)
问题不在于汉字,问题在于两个字符长的关键字。 (这也是它影响UI
的原因。)这个正则表达式:
[^\s,](?:[^,]+[^\s,])?
允许两种可能性:
[^\s,] <-- exactly one character
[^\s,][^,]+[^\s,] <-- three or more characters
因此任何包含两个字符的关键字都不匹配,因此它们会被拆分为单字符关键字。
您可以通过将[^,]+
更改为[^,]*
来修复您的正则表达式,但我倾向于同意Kisaro上述评论的精神;我认为你最好使用Pattern.split
:
private static final KEYWORD_SPLITTER = Pattern.compile("\\s*,\\s*");
for(final String s : KEYWORD_SPLITTER.split(keywords))
System.out.println("keyword:" + s);
答案 1 :(得分:1)
你的正则表达式应该是\\w
来匹配单词。这应该产生所需的输出。
此外,有人建议爆炸:Apache Commons