在新文本文件中打印替换行

use*_*165 0 java printwriter replaceall java.util.scanner

我正在尝试编辑matlab文件并在某些特定行中替换一些编码部分init.但是,使用下面的格式进行更改它根本不会更改行上下文.(它将打印相同的旧行).知道我做错了什么吗?'replaceAll'不适合用行中的其他单词替换某些单词?

提前致谢.

try {
    PrintWriter out = new PrintWriter(new FileWriter(filenew, true));
    Scanner scanner = new Scanner(file);

    while (scanner.hasNextLine()) {
        String line = scanner.nextLine();

        if (line.contains("stream.Values(strmatch('Test',stream.Components,'exact'))") {  
            String newline = line.replaceAll("stream.Values(strmatch('Test',stream.Components,'exact'))", "New Data");

            out.println(newline);
            System.out.println(newline);
        } else {
            out.write(line);
            out.write("\n");
        }
    }     // while loop

    out.flush();
    out.close();
    scanner.close();



} catch (IOException e)  {
    e.printStackTrace();
}
Run Code Online (Sandbox Code Playgroud)

Erw*_*idt 5

replaceAll对方法String将正则表达式作为参数,并在正则表达式的一些字符有特殊的含义,比如在你的表达括号.

只需使用该replace方法,它采用文字字符串:

String newline = line.replace("stream.Values(strmatch('Test',stream.Components,'exact'))", "New Data");
Run Code Online (Sandbox Code Playgroud)

不要被方法的名称混淆 - 它们之间的区别replacereplaceAll不是它们替换的次数,但区别在于第一个采用文字字符串而第二个采用正则表达式.它在Javadoc中:

将与该文字目标序列匹配的此字符串的每个子字符串替换为指定的文字替换序列.

public String replace(CharSequence target, CharSequence replacement) {
Run Code Online (Sandbox Code Playgroud)