不使用正则表达式删除字符串中的子字符串(不能使用replaceAll)
我需要删除字符串中的一些子字符串(在大型数据集中)。 子字符串通常包含特殊字符,如:。,^,/,…和replaceAll()会将它们视为正则表达式的特殊字符,例如点将匹配任何字符,这不是我想要的。
是否有其他函数可以执行“替换”而不将第一个参数视为正则表达式?
只需使用String.replace()。 它的function相同,但它处理内部转义特殊字符以避免您不必担心正则表达式。
文档
你可以按字面意思匹配。 例如,如果我们想匹配“<。]} ^”,我们可以这样做:
Pattern pat=Pattern.compile("<.]}^", PATTERN.LITERAL");
并使用该模式。
您也可以使用反斜杠来逃避它。 请注意,字符串文字本身需要反斜杠,因此转义单个点将采用两个反斜杠,如下所示:
Pattern pat=Pattern.compile("\\.");
编译器可以看到第一个反斜杠,第二个反斜杠被视为正则表达式解析器的反斜杠。
只需使用String.replace(String, String)
,而不是replaceAll
。 String.replace
不会将其参数视为正则表达式。
在String
类中有两个名为replace
方法,它们执行替换而不将其参数视为正则表达式。
一个replace
方法将一个char
替换为另一个char
。
另一个replace
方法用另一个CharSequence
替换CharSequence
(通常是String
)。
从第二个replace
方法引用Javadoc:
将此字符串中与文字目标序列匹配的每个子字符串替换为指定的文字替换序列。
是否还有其他function可以“替换”
是的,它被称为replace
:)它和replaceAll
之间的主要区别在于它逃脱了正则表达式的特殊字符。
顺便说一句,如果你想在字符串中逃避正则表达式的特殊字符,你可以
- 使用
yourString = Pattern.quote(yourString)
, - 用
"\\Q"
和"\\E"
包围它,
只能逃避一些特殊的角色
- 在他们之前使用
"\\"
,如\\.
- 大多数特殊字符也可以通过
"["
和"]"
来包围它们,如[.]
。