我正在尝试编辑matlabfile并替换某些特定行中的一些编码部分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(); }
该replaceAll方法在String将正则表达式作为参数,并在正则表达式的一些字符有特殊的含义,比如在你的表达括号。
replaceAll
String
只需改用replace采用文字字符串的方法即可:
replace
String newline = line.replace("stream.Values(strmatch('Test',stream.Components,'exact'))", "New Data");
不要被方法的名称相混淆- 之间的差别replace,并replaceAll没有在他们多少次更换,但不同的是在第一个就是文字字符串,第二个需要一个正则表达式。在Javadoc中:
用指定的文字替换序列替换该字符串中与文字目标序列匹配的 每个子 字符串。
public String replace(CharSequence target, CharSequence replacement) {