2015-12-11 48 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;", "''");