【问题标题】:Replacing multiple occurences of special characters by a single special character用单个特殊字符替换多次出现的特殊字符
【发布时间】:2019-06-11 16:33:13
【问题描述】:

我想通过单个下划线 "_" 从我的 java 字符串中删除多次出现的特殊字符,例如 " ""-""!""_"。 我试过了

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

它似乎用下划线替换连续的相同类型的特殊字符,但否则不起作用。 例如:

Hello!!!  World

变成

Hello__World

(2个下划线。)但应该是Hello_World

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

这样的正则表达式
replaceAll("([^a-zA-Z0-9])\\1+","_")

但它仍然没有帮助。我怎样才能实现它?

【问题讨论】:

  • 只需使用[\\s!-]+ 模式

标签: java regex


【解决方案1】:

注意\1 是对与第一个捕获组匹配的内容 的反向引用。要实际匹配字符类中的一个或多个任意字符,只需使用+ 量词:

[\\s!-]+

所以,使用

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

IDEONE demo

【讨论】:

  • 正确,所以当我添加 1 时,它与第一组匹配!谢谢我能做到
  • 是的,你可以阅读更多关于backreferences here的信息。
猜你喜欢
  • 1970-01-01
  • 2014-11-03
  • 1970-01-01
  • 2015-07-10
  • 1970-01-01
  • 2011-12-28
  • 1970-01-01
相关资源
最近更新 更多