2017-06-18 119 views
3

我正試圖解決從java中的原始文本中刪除符號和特殊字符並找不到方法。文本摘自網站上的自由文本字段,可能包含任何字面意思。我正在從外部來源獲取此文本,並且無法控制更改設置。所以我必須在我的最後工作。 一些實例是刪除Java中的特殊字符字符串

1)貝倫應該是 - >貝倫

2)阿里亞納應該是 - >阿里亞納

3)哈林應該是 - >哈林

4)YZ ️應該是 - > YZ

5)ここさけは7回は見に行くぞ應該是 - >ここさけは7回は見に行くぞ

6)دميازرقوونيازرق應該是 - >دميازرقوطنيازرق

任何幫助嗎?

+2

因此,通過 「特殊字符」 你的意思是表情符號?你有什麼嘗試? – Sinkingpoint

+0

你可以嘗試使用正則表達式。例如:'yourString.replaceAll(「\\ W」,「」)'去除所有非單詞字符。請參閱[正則表達式](https://www.tutorialspoint.com/java/java_regular_expressions.htm) –

+0

[Emoji值範圍]的可能重複(https://stackoverflow.com/questions/30470079/emoji-value-range) – selbie

回答

0

使用白色空間和POSIX字符類字符類的「任何字母或數字的任何語言」:

str = str.replaceAll("[^\\s\\p{Alnum}]", ""); 
+1

這不適用於上面的許多示例。 – user3212493

2

如果你的意思是「特殊字符」是代理對,試試這個。

static String removeSpecial(String s) { 
    int[] r = s.codePoints() 
     .filter(c -> c < Character.MIN_SURROGATE) 
     .toArray(); 
    return new String(r, 0, r.length); 
} 

String[] testStrs = { 
    "belem ", 
    "Ariana ", 
    "Harlem ", 
    "Yz ️‍", 
    "ここさけは7回は見に行くぞ", 
    "دمي ازرق وطني ازرق " 
}; 

for (String s : testStrs) 
    System.out.println(removeSpecial(s)); 

結果

belem 
Ariana 
Harlem 
Yz ‍ 
ここさけは7回は見に行くぞ 
دمي ازرق وطني ازرق 
+0

完美和感謝,這就是我所需要的 – user3212493

2

你可以試試這個正則表達式是查找所有表情符號,在一個字符串:

regex = "[\\ud83c\\udc00-\\ud83c\\udfff]|[\\ud83d\\udc00-\\ud83d\\udfff]|[\\u2600-\\u27ff]" 

然後刪除它所有的表情圖案使用replaceAll()方法:

String text = "ここさけは7回は見に行くぞ "; 
String regex = "[\\ud83c\\udc00-\\ud83c\\udfff]|[\\ud83d\\udc00-\\ud83d\\udfff]|[\\u2600-\\u27ff]"; 
System.out.println(text.replaceAll(regex, "")); 

輸出

ここさけは7回は見に行くぞ 
+0

@ user3212493如果您發現答案有幫助,將其標記爲已解決,以備將來參考。 – Oghli