2017-06-18 123 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