【问题标题】:How to remove all special Characters from a string except - . and space如何从字符串中删除除 - 之外的所有特殊字符。和空间
【发布时间】:2018-12-05 10:01:00
【问题描述】:

我有一个字符串,我想删除除连字符、点和空格之外的所有特殊字符。

我正在使用filename.replaceAll("[^a-zA-Z0-9.-]","")。它适用于.-,但不适用于空间。

我应该添加什么使它也适用于空间?

【问题讨论】:

  • 你试过我的答案了吗?
  • 您更新的答案对我有用 :)

标签: java regex string


【解决方案1】:

使用\s 或仅使用空格字符,如<a href="/default/index/tourl?u=aHR0cHM6Ly9kb2NzLm9yYWNsZS5jb20vamF2YXNlLzcvZG9jcy9hcGkvamF2YS91dGlsL3JlZ2V4L1BhdHRlcm4uaHRtbA%3D%3D" rel="nofollow" target="_blank">Pattern class javadoc 中所述

\s - A whitespace character: [ \t\n\x0B\f\r]
   - Literal space character

您必须将- 字符转义为\-,这样它就不会被解释为范围表达式,或者确保它保留为最后一个正则表达式字符。把它们放在一起:

filename.replaceAll("[^a-zA-Z0-9\\s.-]", "")
filename.replaceAll("[^a-zA-Z0-9 .-]", "")

【讨论】:

  • 我做了这个 filename.replaceAll("[^a-zA-Z0-9.-\s]","") 并得到这个错误 Invalid escape sequence (有效的是 \b \t \n \f \r \" \' \\)
  • @Nirpeksh 已更新,您需要正确转义 \s-
  • 请记住,\s 代表空白。如果你只想保留空格,我不会使用\s,因为它还匹配:水平和垂直制表符、换行符和回车符等。
  • 如果我只想保留空格,我应该使用什么?
  • 使用文字空格符filename.replaceAll("[^a-zA-Z0-9 .-]", "")
【解决方案2】:

您可以使用此正则表达式[^a-zA-Z0-9\s.-][^a-zA-Z0-9 .-]

\s 匹配空格,(空格字符)仅匹配空格。

所以在这种情况下,如果您想匹配空格,请使用:

filename.replaceAll("[^a-zA-Z0-9\\s.-]", "");

如果您只想匹配空间,请使用:

filename.replaceAll("[^a-zA-Z0-9 .-]", "");

【讨论】:

  • “空格”是空格,但并非所有空格都是“空格”。所以这可能是个问题。
  • @AxelH 你是对的,但我认为他不仅需要空格!
  • @AxelH 我编辑了我的答案以涵盖您的主张,tnx :)
  • 这涵盖了两种解决方案,更好! +1
猜你喜欢
  • 2017-04-05
  • 2011-09-27
  • 1970-01-01
  • 1970-01-01
  • 2016-12-21
  • 1970-01-01
  • 2015-03-12
  • 2013-07-22
  • 1970-01-01
相关资源
最近更新 更多