java
  • newline
  • replaceall
  • 2011-04-14 44 views 4 likes 
    4

    我想知道爲什麼我沒有得到這一個期望的結果:Java新線更換

    String t = "1302248663033 <script language='javascript'>nvieor\ngnroeignrieogi</script>"; 
    t.replaceAll("\n", ""); 
    System.out.println(t); 
    

    輸出是:

    1302248663033 <script language='javascript'>nvieor 
    gnroeignrieogi</script> 
    

    所以我很奇怪,爲什麼\n仍那裏。有人知道嗎?在某些方面\ n是特別的嗎?

    編輯:

    所以我遇到了匹配換行符與a的麻煩。在正則表達式的表達,卻沒有意識到一個用途使用DOTALL選項,所以我會添加什麼人需要做的在這裏以供將來參考:

    String text = null; 
    text = FileUtils.readFileToString(inFile); 
    Pattern p = Pattern.compile("<script language='javascript'>.+?</script>\n", Pattern.DOTALL); 
    text = p.matcher(text).replaceAll(""); 
    out.write(text); 
    

    回答

    17

    字符串是不可改變的。像replaceAll這樣的字符串操作不會修改您調用它的實例,它們會返回新的String實例。解決方法是將修改的字符串分配給您的原始變量。

    t = t.replaceAll("\n", ""); 
    
    +2

    就是這樣。我知道這一點。這是一個漫長的一天... – delmet 2011-04-14 03:35:29

    +3

    要在操作系統之間移植,請使用'System.getProperty(「line.separator」)'代替換行符。 – eee 2011-04-14 04:40:46

    0

    是的,\n是特殊的。這是一個代表換行符的轉義序列。 您需要在字符串文本中將其轉義,以便以您想要的方式實際解釋它。序列之前追加一個\,使它看起來像這樣:

    "\\n" 
    

    現在你的程序應該是這樣的:

    String t = "1302248663033 <script language='javascript'>nvieor\\ngnroeignrieogi</script>"; 
    t = t.replaceAll("\\n", ""); 
    System.out.println(t); 
    

    當然如果字符串t從而地方不是真正到來正在鍵入通過你進入該計劃,那麼你只需要添加額外的斜槓在您的電話replaceAll()

    根據意見編輯。

    +0

    我錯過了其他人指出的其他錯誤。你需要接受'replaceAll()'調用的結果並使用它,而不是原始字符串。 – chandsie 2011-04-14 03:34:30

    相關問題