如何从字符串中删除特殊字符?
我想删除特殊字符,例如:
- + ^ . : ,
从使用 Java 的字符串。
这取决于您定义为特殊字符的内容,但请尝试: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。
这将替换除字母数字之外的所有字符
replaceAll("[^A-Za-z0-9]","");