【问题标题】:Remove white space and special characters in java删除java中的空格和特殊字符
【发布时间】:2014-04-08 11:44:34
【问题描述】:

我的字符串也包含一些特殊字符和空格。我想删除空格和特殊字符,我正在这样做

String str =  "45,%$^ Sharma%$&^,is,46&* a$# java#$43 Developer$#$^ in#$^ CST&^* web*&(,but He%^&^% want to move@!$@# in another team";
    System.out.println( str.replaceAll("[^a-zA-Z]", " ").replaceAll("\\s+"," "));


Output :- sharma is a java Developer in CST web but He want to move in another team

我可以使用单个操作来做到这一点吗?怎么样?

【问题讨论】:

标签: java regex string


【解决方案1】:

用单个空格替换任何非字母序列:

str.replaceAll("[^a-zA-Z]+", " ")

您可能还想在替换后应用trim()

如果您想支持英语以外的语言,请使用"[^\\p{IsAlphabetic}]+""[^\\p{IsLetter}]+"。有关差异,请参阅this question

【讨论】:

  • 这并不能解决 OP 将空间减少到一个符号空间的问题。 “#”应该替换为“”,而不是2个空格。
  • 没关系,我被之前的帖子误导了,包括\\s,忘记了否定包括空格^^
  • 我正要写同样的答案。这里的工作代码:ideone.com/QbszDu
  • 我无法理解 [^a-zA-Z]+ 中的“+”。请解释加号(+)的工作。
  • regexes 中,+ 是一个量词,表示模式重复一次或多次。 (* 表示任意次数,包括零;? 表示可选)
【解决方案2】:

OR 运算符 |应该工作:

System.out.println(str.replaceAll("([^a-zA-Z]|\\s)+", " "));

实际上,空间根本不必存在:

System.out.println(str.replaceAll("[^a-zA-Z]+", " "));

【讨论】:

  • @Dev 您确定您在正则表达式中添加了(),如上所示?此解决方案有效!
  • 我认为你应该接受@Arian 的回答来关闭线程。
【解决方案3】:

试试这个:

str.replaceAll("[\\p{Punct}\\s\\d]+", " ");

用一个空格替换标点、数字和空格。

【讨论】:

    【解决方案4】:

    您可以使用 below 删除任何不是字符(A-Z 或 a-z)的内容。

    str.replaceAll("[^a-zA-Z]","");
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-10-16
      • 2014-08-17
      • 1970-01-01
      • 2021-04-23
      • 1970-01-01
      • 1970-01-01
      • 2015-01-13
      相关资源
      最近更新 更多