正则表达式不适用于替换特殊字符

时间:2016-03-29 13:02:28

标签: java regex

我想要什么都不替换特殊字符。所以我试过

this.name.replace("[^a-zA-Z]+", "").trim()

我认为下面的字是000 Vektor

OOO" Vektor"

2 个答案:

答案 0 :(得分:4)

replace的文档说:

  

将此字符串中与文字目标序列匹配的每个子字符串替换为指定的文字替换序列

它不会采用正则表达式。

replaceAll的文档说:

  

将此字符串中与给定正则表达式匹配的每个子字符串替换为给定的替换。

所以你可以使用:

this.name.replaceAll("[^a-zA-Z]+", "").trim();

您也可以将replaceFirst与正则表达式一起使用,但不在此处。

另外,在评论中你说你已经尝试过了。我怀疑是因为你只是使用:

this.name.replaceAll("[^a-zA-Z]+", "").trim();

但是java字符串不可变,并且不会自行更改。 因此你应该使用:

this.name = this.name.replaceAll("[^a-zA-Z]+", "").trim();

答案 1 :(得分:1)

String.replace采用字面上的第一个参数。 replaceAll使用正则表达式

name = name.replaceAll("[^a-zA-Z ]+", "");