Java - 从文件中转义字符串中的双引号

标签 java regex

我有来自文件的 html 字符串。我需要转义所有双引号。所以我这样做:

String content=readFile(file.getAbsolutePath(), StandardCharsets.UTF_8);
content=content.replaceAll("\"","\\\"");
System.out.println(content);

但是,双引号没有转义,字符串与 replaceAll 方法之前的字符串相同。当我做的时候

String content=readFile(file.getAbsolutePath(), StandardCharsets.UTF_8);
content=content.replaceAll("\"","^^^");
System.out.println(content);

所有双引号都替换为^^^。

为什么 content.replaceAll("\"","\\\""); 不起作用?

最佳答案

您需要使用 4 个反斜杠来表示替换模式中的一个文字反斜杠:

content=content.replaceAll("\"","\\\\\"");

这里,\\\\ 表示文字 \\" 表示文字 "

更多详情请访问 Java String#replaceAll documentation :

Note that backslashes (\) and dollar signs ($) in the replacement string may cause the results to be different than if it were being treated as a literal replacement string; see Matcher.replaceAll

稍后在 Matcher.replaceAll文档:

Dollar signs may be treated as references to captured subsequences as described above, and backslashes are used to escape literal characters in the replacement string.

另一个有趣的替代品是 replacing quotes with dollar sign : 替换为 "\\$"。 2 个 \ 变成了正则表达式引擎的 1 个文字 \ 并且它转义了用于定义反向引用的特殊字符 $。所以,现在它是替换模式中的文字。

关于Java - 从文件中转义字符串中的双引号,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33893701/

相关文章:

java - Java 泛型中的默认类型(如果未指定)

java - 为什么 string.indexOf 方法的参数在 Java 中是一个 int

java - 自定义相似度类 solr 不起作用

java条件运算符和不同类型

java - 如何避免 Hibernate Validator ConstraintDeclarationException?

php - 如何使用 php preg_replace 替换 HTML 标签

javascript - 任何人都可以帮助我使用 gregjacobs/Autolinker.js 的工作示例吗

java - java中如何从字符串中去掉字符串?

java - 正则表达式 ^\\Q &\\E

c# - 非捕获和捕获匹配