如何从字符串中删除所有特殊字符,除了-、.和空格?

5

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

我使用filename.replaceAll("[^a-zA-Z0-9.-]","")。它可以处理.-,但不能处理空格。

我应该添加什么来让它也能处理空格?


你试过我的答案了吗? - Mohsen
你更新后的答案对我有用 :) - Nirpeksh
2个回答

2

Pattern类的Javadoc中所述,您可以使用\s或空格字符来匹配空格。

\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 (valid ones are \b \t \n \f \r " ' \ )。 - Nirpeksh
@Nirpeksh更新了,您需要正确转义\s- - Karol Dowbecki
请记住,\s 代表空格。如果您只想保留空格,则不建议使用 \s,因为它还匹配:水平和垂直制表符、换行符和回车符等。 - 3limin4t0r
如果我只想保留空格,应该使用什么? - Nirpeksh
1
请使用字面空格字符 filename.replaceAll("[^a-zA-Z0-9 .-]", "") - Karol Dowbecki

1

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

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

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

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

如果你只想匹配空格,可以使用以下代码:

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

1
一个“空格”是指空白字符,但并非所有的空白字符都是“空格”。因此这可能会成为一个问题。 - AxelH
@AxelH 你说得对,但我认为他不仅需要空格,还需要空白符! - Mohsen
@AxelH 我编辑了我的答案来涵盖你的主张,谢谢 :) - Mohsen
这涵盖了两个解决方案,很好!+1 - AxelH

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