2015-12-11 832 views
0

我见过其他人问过类似的问题,并遵循给予这些人的指示,但我仍然无法让我的代码正常工作。如何使用replaceAll方法替换双引号"

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;行,它不会改变他们,并最终给我â€,而不是双引号。我不知道还有什么我应该改变我的代码,以使其工作。

+0

你能举个例子你提供的代码不工作的字符串的位置? –

+0

如果你不想重新发明轮子,你也可以使用['StringEscapeUtils#escapeHtml4()'](https://commons.apache.org/proper/commons-lang/javadocs/api-release/org/来自Apache Commons Lang的apache/commons/lang3/StringEscapeUtils.html#escapeHtml4%28java.lang.String%29)。 –

+0

请参见[UTF-8编码调试图表](http://www.i18nqa.com/debug/utf8-debug.html)。 – saka1029

回答

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

我得到了相同的行为你。 java编译器在引用'''字符时正在吃掉你的转义字符,正则表达式编译器在输入一个字符串时希望一个引号也能被转义,这是不应该的,但在这种情况下,是。

如果你在前面加上一个转义逃跑,它会工作。

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

或者,你可以可以使用String对象的搜索表达式。

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

我会改变你的代码像这样

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

它应该像你的一样工作,但不需要使用regexp进行简单的替换。

0

你有一个编码问题,可以解决由它的Unicode代码设置单引号:

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

替换

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