如何用"替换双引号使用replaceAll方法

时间:2015-12-11 00:39:08

标签: java regex

我之前见过其他人问过类似的问题并遵循给这些人的指示,但我仍然无法让我的代码正常运行。

try {

    FileReader fr_p = new FileReader("p.txt");
    BufferedReader in_p = new BufferedReader(fr_p);

    String line = in_p.readLine();

    for (;;) {

        line = line.replaceAll("&","&");
        line = line.replaceAll("<","&lt;");
        line = line.replaceAll(">","&gt;");
        line = line.replaceAll("\"","&quot;");

        people.add(line);
        line = in_p.readLine();
        if (line == null) break;

    }

    in_p.close();
} catch (FileNotFoundException e) {

    System.out.println("File p.txt not found.");
    System.exit(0);

} catch (IOException e) {

    System.out.println("Error reading from file.");
    System.exit(0);

}

这是我编写的代码,用于尝试将每个名称放在文本文件的单独行上,并将其放入ArrayList中,将特殊字符替换为其XML实体。然后我将其写入HTML文件中。

我编写的代码对前三个字符做得很好,但是当它到达试图将任何双引号更改为&quot;的行时,它不会改变它们并且最终给了我â€而不是双引号。我不确定我的代码还应该改变什么才能让它发挥作用。

5 个答案:

答案 0 :(得分:1)

当我跑步时

String line = "This is a string with \" and \" in it";
line = line.replaceAll("\"","&quot;");
System.out.println(line);

我得到了

This is a string with &quot; and &quot; in it

注意:有很多不同类型的引号,但只有一个"字符。如果您有不同的引号,则不匹配。

https://en.wikipedia.org/wiki/Quotation_mark

答案 1 :(得分:1)

我和你有同样的行为。 java编译器正在引用你的转义符号&#39;&#34;&#39;&#39;字符。 regex编译器必须有一些奇怪的东西,期望在输入字符串文字时也可以转义引号。它不应该,但在这种情况下它是。

如果你预先设置了一个转义逃生,它就可以了。

   String lineout = line.replaceAll("\\\"","&quote;");

或者,您可以将String对象用于搜索表达式。

   String line = "embedded\"here";
   String searchstring = "\"";
   String lineout = line.replaceAll(searchstring,"&quote;");

答案 2 :(得分:0)

我会将您的代码更改为此类

line = line.replace("&","&amp;")
           .replace("<","&lt;")
           .replace(">","&gt;")
           .replace("\"","&quot;");

它应该像你的一样工作但是没有必要使用regexp来简单替换。

答案 3 :(得分:0)

如果您遇到编码问题,可以通过unicode代码设置单引号来解决此问题:

line = line.replaceAll("\"", "\u0027");

答案 4 :(得分:0)

替换为

&#13;
&#13;
String replace = line.replace("&quot;", "''");
&#13;
&#13;
&#13;