我有简单的#hashTag
文本提取方法:
private String[] buildHashTag(String str) { ArrayListallMatches = new ArrayList (); 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? :-)
OUTPUT:
[#Orange]
但它是FAIL,输出必须[#Orange, #pomeran?]
.你能告诉我,错误的代码在哪里?帮我.谢谢.
添加Pattern.UNICODE_CHARACTER_CLASS
修饰符或使用Pattern.compile("(?U)(#\\w+)\\b")
.否则,\b
并且\w
不匹配所有Unicode字符.
指定此标志后,(仅限US-ASCII)预定义字符类和POSIX字符类符合Unicode技术标准#18:Unicode正则表达式附录C:兼容性属性.
这是一个演示:
String str = "#Orange in Czech language mean #pomeran? :-)"; ArrayListallMatches = new ArrayList (); 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?]