2016-11-20 78 views
0

我想要替換.txt文件中的一行字符串。 然而,當我運行我的代碼,程序只是刪除一切,包括空格 這行是我的代碼:是否可以在replaceAll上使用字符串變量?

public static void main(String[] args) { 
    try { 
     String str; 
     String temp = ""; 
     String oldtext = ""; 
     BufferedReader br = new BufferedReader(new FileReader("file.txt")); 
     while ((str = br.readLine()) != null) { 
      oldtext += str + "\r\n"; 
      if (str.equals("I drink Java")) { 
       temp = br.readLine(); 
       System.out.println(temp); 
      } 

     } 
     br.close(); 
     String newtext = oldtext.replaceAll(temp, "Hello"); 

     FileWriter writer = new FileWriter("file.txt"); 
     writer.write(newtext); 
     writer.close(); 
    } catch (IOException ioe) { 
     ioe.printStackTrace(); 
    } 
} 

file.txt的

I drink Java 
I sleep Java 
This is test string 1 
This is test string 20000 

我試圖取代「我通過使用字符串變量temp將睡眠Java「行改爲」Hello「。我知道它的工作原理是使用String newtext = oldtext.replaceAll("I sleep Java","Hello"); 但我想知道是否有可能按照我的方式進行。如果是的話,誰能告訴我我在哪裏錯了? 謝謝! :)

+0

如果您想使用正則表達式,replaceAll()很有用。你沒有。所以只需使用replace()。 –

+0

你有沒有得到它的工作? – ItamarG3

回答

1

在此細看:

while ((str = br.readLine()) != null) { 
    oldtext += str + "\r\n"; 
    if (str.equals("I drink Java")) { 
     temp = br.readLine(); 
     System.out.println(temp); 
    } 
} 

如果該行是「我喝的Java」, 那麼你讀取下一行並將其存儲到temp。 像所有其他行一樣,該行絕不會附加到oldtext, 之後。 所以這條線將在oldtext中丟失。

後來, 當您執行這一點:

String newtext = oldtext.replaceAll(temp, "Hello"); 

沒有匹配temp,因爲temp不是oldtext一部分。 也許你要追加它,就像所有其他線路:在下面的代碼

while ((str = br.readLine()) != null) { 
    oldtext += str + "\n"; 
    if (str.equals("I drink Java")) { 
     temp = str+"\n"; 
    } 
} 
br.close(); 
String newtext = oldtext.replaceAll(temp, "Hello"+"\n"); 
+0

謝謝你的擡頭......你保存了我的任務:D 再次感謝! – Jerry

0

你應該不叫br.readLine()設置temp 。只需讀取文件中的完整文本先到java變量並最後替換。

將更加優化,可讀性和清潔

while((str = br.readLine()) !=null) { 
     oldtext += str + "\r\n"; 
     if(str.equals("I drink Java")){ 
     temp = br.readLine(); 
     System.out.println(temp); 
     } 

}  br.close(); 
String newtext = oldtext.replaceAll(temp,"Hello"); 

類似下面

while((str = br.readLine()) !=null) { 
     oldtext += str + "\r\n"; 


}  br.close(); 
String newtext = oldtext.replaceAll("I drink Java","Hello"); 

的最佳方式將是

String newText= ""; 
while((str = br.readLine()) !=null) { 

     if(str.equals("I drink Java")){ 
     str = "Hello"; 
     } 
     newText+= str + "\r\n"; 

}  br.close(); 

現在,只需寫入新TEX t

 FileWriter writer = new FileWriter("file.txt"); 
     writer.write(newtext); 
     writer.close(); 
0

爲什麼要首先檢查STR包含I drink Java

oldtext += temp + "\r\n"; 
+0

注意到該問題詢問在'replaceAll()'中使用變量。 – ItamarG3

+0

@ItamarGreen對不起,我沒有把你帶到這裏。 'replaceAll()'將在舊文本中替換所有出現的'I drink Java'。那麼問題是什麼? –

+0

他想在'replaceAll()'中使用一個變量。 – ItamarG3

相關問題