2016-11-20 68 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