2013-01-16 58 views
2

我正在嘗試使用java編輯文件。用java轉義引用替換文件中的每個引號

我想逃避每次標價「在我的文件與\」

我試了一下這樣的(關於在計算器的其他解決方案,我可以複製該代碼):

public void replaceInFile(File file) throws IOException { 

File tempFile = new File("twittergeoUpdate.csv"); 
FileWriter fw = new FileWriter(tempFile); 

Reader fr = new FileReader(file); 
BufferedReader br = new BufferedReader(fr); 

while (br.ready()) { 
fw.write(br.readLine().replaceAll("\"", "\\\"") + "\n"); 
} 

fw.close(); 
br.close(); 
fr.close(); 
} 

我太快了......這對我不起作用。報價只是在我的文件中保持不變。有任何想法嗎 ?

+0

您無法寫入文件,也不會在讀取文件時指望它發生更改。看到我的答案。 –

回答

3

\\\"只逃脫"(雙引號),你必須藏漢逃離反斜槓,所以你需要5個反斜槓。 \\\\\"

s.replaceAll("\"", "\\\\\"") 
2

您應該使用Apache commons-lang包中的StringEscapeUtils#escapeJava()包。

像這樣:

org.apache.commons.lang.StringEscapeUtils.escapeJava(<yourStringLiteralHere>) 

從javadoc的

StringEscapeUtils#escapeJava()逃脫使用Java字符串規則字符串中的字符。

特賣正確地與報價和控制字符(製表符,回車,CR,FF,等)

因此,一個標籤成爲字符 '\' 和 'T'。

Java字符串與JavaScript字符串之間的唯一區別在於JavaScript中必須轉義單引號。

  • 輸入字符串:他沒有說, 「住手!」
  • 輸出字符串:他沒有說,\「住手!\」
1

我編碼:

public void replaceInFile(File file) throws IOException { 

    File tempFile = new File("twittergeoUpdate.csv"); 
    FileWriter fw = new FileWriter(tempFile); 

    Reader fr = new FileReader(file); 
    BufferedReader br = new BufferedReader(fr); 

    while (br.ready()) { 

     fw.write(br.readLine().replaceAll("\"", "\\\\\"") + "\n"); 
    } 

    fw.close(); 
    br.close(); 
    fr.close(); 
}//replaceInFile 

正確的替換字符串是\\\」(5反斜槓,而不是3)

1

的基本問題是,你不能寫一個文件你在你的情況下,FileWriter的第一件事是truncate這個文件,我看過一些例子,讀者仍然可以讀取一些東西,但是已經損壞了。

您必須寫入臨時文件,關閉這兩個文件,並在完成時使用臨時文件替換(使用刪除和重命名)您的原始文件。