如何从字符串中删除特殊字符?

2022-08-31 09:26:46

我想删除特殊字符,例如:

- + ^ . : ,

从使用 Java 的字符串。


答案 1

这取决于您定义为特殊字符的内容,但请尝试:replaceAll(...)

String result = yourString.replaceAll("[-+.^:,]","");

请注意,该字符不能是列表中的第一个字符,因为您必须对其进行转义,或者它意味着“除这些字符之外的任何字符”。^

另一个注意事项:字符必须是列表中的第一个或最后一个,否则您必须对其进行转义,否则它将定义一个范围(例如 将表示“范围中的所有字符到 )。-:-,:,

因此,为了保持一致性而不依赖于字符定位,您可能希望转义所有在正则表达式中具有特殊含义的字符(以下列表不完整,因此请注意其他字符,如 、等):({$

String result = yourString.replaceAll("[\\-\\+\\.\\^:,]","");


如果你想摆脱所有的标点符号和符号,试试这个正则表达式:(请记住,在Java字符串中,你必须转义反斜杠:)。\p{P}\p{S}"\\p{P}\\p{S}"

第三种方式可能是这样的,如果你能准确地定义你的字符串中应该保留什么:

String  result = yourString.replaceAll("[^\\w\\s]","");

这意味着:替换所有不是单词字符(在任何情况下都是a-z,0-9或_)或空格。

编辑:请注意,还有其他一些模式可能会有所帮助。但是,我无法全部解释它们,因此请查看 regular-expressions.info 的参考部分。

以下是“定义允许的字符”方法的限制性较小的替代方案,如Ray所建议的那样:

String  result = yourString.replaceAll("[^\\p{L}\\p{Z}]","");

正则表达式匹配任何语言中不是字母而不是分隔符(空格,换行符等)的所有内容。请注意,您不能使用(大写的P表示没有该属性),因为这意味着“不是字母或不是空格的所有内容”,这几乎与所有内容匹配,因为字母不是空格,反之亦然。[\P{L}\P{Z}]

有关 Unicode 的其他信息

某些 unicode 字符似乎由于编码它们的不同可能方法(作为单个码位或码位组合)而引起问题。有关详细信息,请参阅 regular-expressions.info


答案 2

这将替换除字母数字之外的所有字符

replaceAll("[^A-Za-z0-9]","");