从Java字符串

时间:2017-06-18 22:54:45

标签: java

我正在尝试从java中的原始文本中删除符号和特殊字符,但无法找到方法。该文本来自网站中的自由文本字段,该字段可能包含任何字面意思。我从外部源获取此文本,无法控制更改设置。所以我必须在我的最后工作。 一些例子是

1)贝伦应该是 - >贝伦

2)Ariana应该是 - >阿里亚纳

3)哈林应该是 - >哈林

4)Yz️应该是 - > YZ

5)ここさけは7回は见に行くぞ应该是 - >ここさけは7回は见に行くぞ

6)دميازرقوطنيازرق应该是 - > دميازرقوطنيازرق

请帮忙吗?

3 个答案:

答案 0 :(得分: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回は見に行くぞ 

答案 1 :(得分:1)

如果你的意思是&#34;特殊字符&#34;是代理对,试试这个。

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回は見に行くぞ
دمي ازرق وطني ازرق 

答案 2 :(得分:0)

对于空格使用字符类,对“任何语言的任何字母或数字”使用POSIX字符类:

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