0

我需要删除字符串中的一些子字符串(在大型数据集中)。子字符串通常包含特殊字符,例如:., ^, /,... 而 replaceAll() 会将它们视为正则表达式的特殊字符,例如点将匹配任何字符,这并不是我真正想要的。

是否有其他功能可以在不将第一个参数视为正则表达式的情况下进行“替换”?

4

5 回答 5

2

只需使用 String.replace()。它的功能相同,但它处理在内部转义特殊字符以避免您不必担心正则表达式。

文档

于 2013-07-09T17:15:29.450 回答
2

你可以从字面上匹配。例如,如果我们想匹配 "<.]}^",我们可以这样做:

Pattern pat=Pattern.compile("<.]}^", PATTERN.LITERAL");

并使用该模式。

您也可以使用反斜杠来转义它。请注意,字符串文字本身需要反斜杠,因此转义单个点将需要两个反斜杠,如下所示:

Pattern pat=Pattern.compile("\\.");

第一个反斜杠被编译器看到,第二个反斜杠被用作正则表达式解析器的反斜杠。

于 2013-07-09T17:16:03.490 回答
0

只是使用String.replace(String, String),不是replaceAllString.replace不将其参数视为正则表达式。

于 2013-07-09T17:15:41.967 回答
0

replace类中命名了2 个方法String,它们执行替换而不将它们的参数视为正则表达式。

一种方法用另一种replace方法代替。charchar

replace一种方法将 a CharSequence(通常是 a String)替换为 another CharSequence

从第二种replace方法中引用 Javadocs:

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

于 2013-07-09T17:15:56.483 回答
0

是否还有其他功能可以“替换”

是的,它被称为replace:) 它之间的主要区别在于replaceAll它转义了正则表达式特殊字符。


顺便说一句,如果你想在字符串中转义正则表达式的特殊字符,你可以

  • 使用yourString = Pattern.quote(yourString)
  • "\\Q"用和包围它"\\E"

只转义一些特殊字符,你可以

  • "\\"在他们喜欢之前使用\\.
  • 大多数特殊字符也可以通过用"["and包围来转义。"]"[.]
于 2013-07-09T17:17:02.167 回答