[英]Java regex for special character
我有從文本中提取#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č :-)
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č :-)";
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č]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.