我有从文本中提取#hashTag
的简单方法:
private String[] buildHashTag(String str) {
ArrayList<String> allMatches = new ArrayList<String>();
Matcher m = Pattern.compile("(#\\w+)\\b").matcher(str);
while (m.find()) {
allMatches.add(m.group());
}
return allMatches.toArray(new String[0]);
}
问题是我是否发送带有特殊字符的字符串,例如字符串“POMERANČ”。
测试: INPUT:
#Orange in Czech language mean #pomeranč :-)
输出:
[#Orange]
但它是FAIL,输出必须是[#Orange, #pomeranč]
。你能告诉我,错误的代码在哪里?帮我。谢谢。
答案 0 :(得分:5)
添加Pattern.UNICODE_CHARACTER_CLASS
修饰符或使用Pattern.compile("(?U)(#\\w+)\\b")
。否则,\b
和\w
与所有Unicode字符都不匹配。
当指定此标志时,(仅限US-ASCII)预定义字符类和 POSIX字符类符合Unicode Technical Standard #18: Unicode Regular Expression附件C:兼容性属性。
以下是a demo:
String str = "#Orange in Czech language mean #pomeranč :-)";
ArrayList<String> allMatches = new ArrayList<String>();
Matcher m = Pattern.compile("(?U)(#\\w+)\\b").matcher(str);
// ^^^^
while (m.find()) {
allMatches.add(m.group());
}
System.out.println(Arrays.toString(allMatches.toArray()));
输出:[#Orange, #pomeranč]
答案 1 :(得分:1)