从Java字符串中删除特殊字符

3

我正在尝试在Java中解决从原始文本中删除符号和特殊字符的问题,但无法找到解决方法。该文本来自网站上的自由文本字段,可能包含任何内容。我从外部来源获取此文本,并且无法控制更改设置。因此,我必须在我的端上解决这个问题。

一些例子:

1)belem 应该是--> belem

2)Ariana 应该是--> Ariana

3)Harlem 应该是--> Harlem

4)Yz ️‍ 应该是--> Yz

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

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

请问有什么帮助吗?


2
那么你所说的“特殊字符”是指表情符号吗?你尝试过什么? - Sinkingpoint
你可以尝试使用正则表达式。例如:yourString.replaceAll("\\W", "") 可以删除所有非单词字符。在这里查看正则表达式 - TuyenNTA
可能是Emoji值范围的重复问题。 - selbie
@TuyenNguyen 这也将过滤掉所有非英语单词。 - user3212493
3个回答

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回は見に行くぞ 

如果您发现这个答案有帮助,请将其标记为已解决,以便将来作为参考。 - Oghli

1
如果你指的“特殊字符”是代理对,请尝试这个。
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回は見に行くぞ
دمي ازرق وطني ازرق 

完美的,谢谢,这正是我所需要的。 - user3212493

0

使用字符类来表示空格,使用POSIX字符类来表示“任何语言中的任何字母或数字”:

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接