将多个特殊字符替换为单个特殊字符

3

我想从Java字符串中一次性将多个特殊字符(如" ""-""!""_")删除,并用单个下划线"_"替换它们。

我尝试过以下代码:

replaceAll("([\\s\\-\\!])\\1+","_")

看起来它会用下划线替换连续的相同类型的特殊字符,但在其他情况下不起作用。 例如:

Hello!!!  World

变成

Hello__World

(两个下划线) 但应该是 Hello_World

对于像 Hello - World 这样的情况,它会失败。 我还尝试使用正则表达式,并制作了一个正则表达式,如下:

replaceAll("([^a-zA-Z0-9])\\1+","_")

但是这仍然没有帮助。我该如何实现它?

只需使用 [\\s!-]+ 模式。 - Wiktor Stribiżew
1个回答

4
请注意,\1是对第一个捕获组匹配的内容的反向引用。要实际匹配字符类中的一个或多个任意字符,请使用+量词:
[\\s!-]+

那么,使用
str = str.replaceAll("[\\s!-]+","_");

请查看IDEONE演示


1
正确的,当我加1时,它匹配到了第一组,谢谢,我能做到。 - Vraj Solanki
是的,您可以在这里阅读有关反向引用的更多信息。 - Wiktor Stribiżew

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