使用Java字符串.replaceFirst用于替换包含特殊正则表达式字符的字符串



为了将html源代码字符串分割成它的各个部分,我编写了一个方法,该方法获取字符串的下一个所需部分,将其复制到字符串列表中,然后删除字符串中出现的内容。对于删除,我使用text.replaceFirst(s, "")

不幸的是,提供的html代码包含像'|'这样的regex元字符,导致我只删除了部分已经复制的字符。

我真的不想尝试在所有可能有问题的符号前面加上反斜杠来转义,因为这是一项乏味的工作,而且容易出错。

是否有可能只替换另一个字符串中出现的第一个字符串而不必担心这些字符?

的例子:

String input = "<title>text | more</title>";
String[] expected = ["<title>", "text | more", "</title>"];

我分割为>,因此得到"<title>",将其添加到我的结果列表并调用input.replaceFirst("<title>", "");,将我的输入保留为"text | more</title>"

我分割为<,因此得到"text | more",将其添加到我的结果列表中并调用input.replaceFirst("text | more", ""),留下我的输入为"| more</title>",但我希望我的输入为"</title>"

您可以使用Pattern.quote()方法转义字符串

中的所有regex元字符
String input = "<title>text | more</title>";
String[] expected = {"<title>", "text | more", "</title>"};
String[] parts = input.split(Pattern.quote(">"));
for (String part : parts) {
input = input.replaceFirst(Pattern.quote(part), "");
}
System.out.println(Arrays.toString(parts)); 

不需要替换。您可以直接拆分<>的查找。

String[] res = input.split("(?<=>)|(?=<)");
// [<title>, text | more, </title>]
然而,应该注意的是,正则表达式并不是解析HTML的最佳工具。考虑使用XML解析器。

相关内容

  • 没有找到相关文章

最新更新