我有下面的代码,但看起来它以错误的方式解析中文关键字。我该如何更改它?
输出:
keyword:test keyword:中 keyword:文 keyword:U keyword:I keyword:素 keyword:材
Should be below:
keyword:test keyword:中文 keyword:UI keyword:素材
This is my code:
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);
}
}
谢谢!
最佳答案
问题不在于中文字符,问题在于两个字符长的关键字。 (这就是为什么它也会影响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);
关于java - 如何用java正则表达式解析中文元关键字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9543210/