0

我正在尝试更改 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();
        }
    }

}
4

3 回答 3

1

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

于 2013-10-08T06:53:42.820 回答
0

在您的情况下使用replace

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

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

请参阅此处的文档,

于 2013-10-08T05:53:23.080 回答
0

问题在于.replaceAll(String regex, String replacement)它将正则表达式作为第一个参数。所以,假设你想完全匹配i have !? in my text. 您需要将其更改为对正则表达式友好的(如果您愿意的话)文本。

所以,简而言之,你需要用这个替换i have !? in my texti have !\\? in my text

于 2013-10-08T05:55:10.117 回答