用特殊字符覆盖文件中的行

时间:2013-10-08 05:46:49

标签: java io

我正在尝试更改txt文件中的部分行。它工作正常,但如果文件中的行包含特殊字符,如?!(它不起作用 有什么问题?

import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStreamReader;


public class nomarks
{
    public static void main(String[] args)
    {
        FileInputStream fstream;
        try
        {
            fstream = new FileInputStream("readme.txt");
            BufferedReader br = new BufferedReader(new InputStreamReader(fstream));
            String oldText = "i have !? in my text";
            String textToChange = "cant solve the problem";
            String line;
            String holeFile = "";
            while ((line = br.readLine()) !=null)
            {
                holeFile += line + "\r\n";
            }
            br.close();
            FileWriter writer = new FileWriter("readme.txt");
            String newtext = holeFile.replaceAll(oldText, textToChange);
            writer.write(newtext);
            writer.close();
        } catch (IOException e)
        {
            e.printStackTrace();
        }
    }

}

3 个答案:

答案 0 :(得分:1)

您可以使用holeFile.replaceAll(Pattern.quote(oldText), textToChange)

答案 1 :(得分:0)

在您的案例中使用replace

String newtext = holeFile.replace(oldText, textToChange);

replaceAll使用regexp(并且您的字符串中有问号),这就是您可能遇到问题的原因。

请参阅文档here

答案 2 :(得分:0)

带有.replaceAll(String regex, String replacement)问题是它将正则表达式作为第一个参数。因此,假设您要完全匹配i have !? in my text。您需要将其更改为正则表达式(如果您愿意)文本。

因此,简而言之,您需要将此代替:i have !? in my texti have !\\? in my text