不使用正则表达式删除字符串中的子字符串(不能使用replaceAll)

时间:2013-07-09 17:12:46

标签: java string substring replaceall

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

是否有其他函数可以执行“替换”而不将第一个参数视为正则表达式?

5 个答案:

答案 0 :(得分:2)

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

Documentation

答案 1 :(得分:2)

你可以按字面意思匹配。例如,如果我们想匹配“<。]} ^”,我们可以这样做:

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

并使用该模式。

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

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

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

答案 2 :(得分:0)

只需使用String.replace(String, String),而不是replaceAllString.replace不会将其论证视为正则表达式。

答案 3 :(得分:0)

replace类中有两个名为String的方法执行替换而不将其参数视为正则表达式。

一种replace方法将一个char替换为另一个char

另一个replace方法将CharSequence(通常为String)替换为另一个CharSequence

从第二个replace方法引用Javadoc:

  

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

答案 4 :(得分:0)

  

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

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


BTW如果你想在字符串中转义正则表达式的特殊字符,你可以

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

只能逃避一些特殊字符

  • 在他们之前使用"\\",例如\\.
  • 也可以使用"[""]" [.]围绕它们来转义大多数特殊字符。