2014-06-19 6 views
0

matlabfile을 편집하고 일부 특정 행에서 일부 코딩 부분 init을 바꾸려고합니다. 그러나 아래의 형식을 사용하여 변경 사항을 적용하면 라인 컨텍스트가 전혀 변경되지 않습니다. (동일한 이전 행을 인쇄합니다). 어떤 생각인지 내가 뭘 잘못 했니? 'replaceAll'은 일부 단어를 줄의 다른 단어로 바꾸는 데 적합하지 않습니까?새 텍스트 파일에서 대체 된 행 인쇄

미리 감사드립니다. String

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(); 
} 

답변

5

replaceAll 방법은 인수로 정규 표현식을 받아, 정규 표현식에 일부 문자는 표현식에 괄호로 특별한 의미를 가지고있다.

단순히 리터럴 문자열을 소요하는 대신 replace 방법을 사용하십시오

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

메소드의 이름을 혼동하지 마십시오 - 그들은 대체 몇 번에 replacereplaceAll의 차이가 아닌, 하지만 차이점은 첫 번째 문자가 문자열을 사용하고 두 번째 문자가 정규 표현식을 사용한다는 점입니다. 그것은 자바 독에 있어요 :

가 지정된 리터럴 치환 순서에이 문자 그대로의 목표를 일치하는 문자열 시퀀스의 각 문자열을 대체합니다.

+0

감사합니다. replace와 replaceAll의 차이점을 알지 못했습니다. – user3211165