2014-02-08 105 views
0

我不得不將一串字符串導出爲在Excel中打開的CSV。該字符串包含「\ n」和我需要包含在CSV所以「\ t」我做了以下導出數據之前:強制換行再次正確打印

public static String unEscapString(String s) 
{ 
    StringBuilder sb = new StringBuilder(); 
    for (int i = 0; i < s.length(); i++) 
    { 
     switch (s.charAt(i)) 
     { 
      case '\n': sb.append("\\n"); break; 
      case '\t': sb.append("\\t"); break; 
      default: sb.append(s.charAt(i)); 
     } 
    } 
    return sb.toString(); 
} 

的問題是,我現在重新導入數據到Java,但我無法弄清楚如何讓換行符和標籤再次正確打印。我試過了:

s.replaceAll("\\n", "\n"); 

但它仍然忽略換行符。幫幫我?

編輯:

說,在CSV一個字符串爲「foo \ n吧」:什麼,我試圖做例子。當我將其導入使用Java和我試圖打印相同的字符串到控制檯,但有換行符的行爲正確

+0

你能否提供一個's'和'replace'的結果? – jpmc26

+0

用一個例子編輯了我的作業 – user1217222

回答

2

replaceAll的第一個參數是正則表達式。你有2個選擇。您可以使用普通的老replace像這樣:

s.replace("\\n", "\n"); 

,或者你可以逃脫正則表達式解析器斜槓(這是從剝離單斜槓):

s.replaceAll("\\\\n", "\n"); 

s.replaceAll(Pattern.quote("\\n"), "\n"); 

因爲您沒有使用正則表達式,所以我會選擇replace

+0

謝謝!這正是這種情況 – user1217222

+0

@ user1217222很高興我能提供幫助。 – jpmc26

1

應該

sb.append("\n"); 

否則,你會得到一個'\''n'通過使用"\\n"


但我建議你使用:

sb.append(System.getProperty("line.separator")); 

這裏System.getProperty("line.separator")讓你在Java平臺無關的換行符。同樣來自Java 7的還有一種直接返回值的方法:System.lineSeparator()

+0

我相信'unEscapString'按預期工作,雖然名字很差。它將實際換行符轉換爲文本'\ n'。 (換句話說,它將轉義爲導出的字符串。)注意'case'語句中的換行符和製表符。問題是當試圖把實際的換行字符放回去。 – jpmc26

+0

把命名約定放在一邊,jpmc26在我正在嘗試做的是正確的 – user1217222

0

如果你想要一個字符串中的實際換行符,它應該是\ n,而不是\\ n。你的方式,它被解釋爲一個反斜槓,然後'n'。