是否可以在replaceAll上使用字符串变量?

时间:2016-11-20 14:04:05

标签: java

我正在尝试替换.txt文件中的一行字符串。 但是,当我运行我的代码时,程序只删除行中的所有内容,包括空格 这是我的代码:

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

我正在尝试使用String变量temp将“I sleep Java”行替换为“Hello”。我知道它可以使用String newtext = oldtext.replaceAll("I sleep Java","Hello"); 但我想知道它是否有可能像我那样做。如果是的话,谁能告诉我我错在哪里? 谢谢! :)

3 个答案:

答案 0 :(得分: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。 也许你想要追加它,就像所有其他行一样:

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

答案 1 :(得分:0)

您不应致电br.readLine()来设置temp

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");

答案 2 :(得分:0)

为什么你首先检查str包含I drink Java在下面的代码中。只需先将文件中的完整文本读入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();

现在只需编写新文本

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