2013-07-10 3 views
0

주어진 문자열 집합을 포함하는 텍스트 파일에 임의의 줄을 추가하려고합니다. 테스트 파일을 만들었는데, 그 중에 하나를 넣었습니다. 내 코드는 텍스트 파일의 이전 줄과 같은 줄에이 문자열 중 하나를 포함하는 텍스트 파일의 모든 줄을 인쇄해야합니다. 내 텍스트 파일의String.contains as registered string.contains

import java.io.File; 
import java.io.FileNotFoundException; 
import java.util.ArrayList; 
import java.util.Scanner; 
public class AppendIfFromFileScanner { 
public static void main(String args[]) { 
    File file = new File("C:\\Users\\frencke\\workspace\\Testing Stuff\\Append Tetsing\\file3.txt"); 
    ArrayList<String> lines = new ArrayList<String>(); 
    String delima = "\\s+\\s+\\s+\\s+\\s+&\\s+"; 
    String delimb = "\\s+\\s+\\s+\\s+\\s+\\+\\s+"; 
    String delimc = "\\s+\\s+\\s+\\s+\\s+z\\s+"; 
    String delimd = "\\s+\\s+\\s+\\s+\\s+1\\s+"; 
    String delime = "\\s+\\s+\\s+\\s+\\s+2\\s+"; 
    String delimf = "\\s+\\s+\\s+\\s+\\s+3\\s+"; 
    String delimg = "\\s+\\s+\\s+\\s+\\s+4\\s+"; 
    String delimh = "\\s+\\s+\\s+\\s+\\s+5\\s+"; 
    String delimi = "\\s+\\s+\\s+\\s+\\s+6\\s+"; 
    String delimj = "\\s+\\s+\\s+\\s+\\s+7\\s+"; 
    String delimk = "\\s+\\s+\\s+\\s+\\s+8\\s+"; 
    String deliml = "\\s+\\s+\\s+\\s+\\s+9\\s+"; 
    String delimm = "\\s+\\s+\\s+\\s+\\s+a\\s+"; 
    String delimn = "\\s+\\s+\\s+\\s+\\s+b\\s+"; 
    String delimo = "\\s+\\s+\\s+\\s+\\s+c\\s+"; 
    String delimp = "\\s+\\s+\\s+\\s+\\s+d\\s+"; 
    String delimq = "\\s+\\s+\\s+\\s+\\s+e\\s+"; 
    String delimr = "\\s+\\s+\\s+\\s+\\s+f\\s+"; 
    try { 
     Scanner scanner = new Scanner(file); 
     while (scanner.hasNextLine()) { 
      lines.add(scanner.nextLine());} 
for(int i=0; i<lines.size(); i++){ 
    for(String s=null; i<lines.size(); i++){ 
     s = lines.get(i); 
     if(!s.contains(delima)|| 
      !s.contains(delimb)|| 
      !s.contains(delimc)|| 
      !s.contains(delimd)|| 
      !s.contains(delime)|| 
      !s.contains(delimf)|| 
      !s.contains(delimg)|| 
      !s.contains(delimh)|| 
      !s.contains(delimi)|| 
      !s.contains(delimj)|| 
      !s.contains(delimk)|| 
      !s.contains(deliml)|| 
      !s.contains(delimm)|| 
      !s.contains(delimn)|| 
      !s.contains(delimo)|| 
      !s.contains(delimp)|| 
      !s.contains(delimq)|| 
      !s.contains(delimr)) 
     System.out.print("\r\n" + s); 
     else if(s.contains(delima)|| 
       s.contains(delimb)|| 
       s.contains(delimc)|| 
       s.contains(delimd)|| 
       s.contains(delime)|| 
       s.contains(delimf)|| 
       s.contains(delimg)|| 
       s.contains(delimh)|| 
       s.contains(delimi)|| 
       s.contains(delimj)|| 
       s.contains(delimk)|| 
       s.contains(deliml)|| 
       s.contains(delimm)|| 
       s.contains(delimn)|| 
       s.contains(delimo)|| 
       s.contains(delimp)|| 
       s.contains(delimq)|| 
       s.contains(delimr)) 
     System.out.print(s);} 
} 
}catch (FileNotFoundException e) { 
System.out.println("Cannot find file."); 
} 
} 
} 

내용과 같습니다 :

그러니까 기본적으로
first line 
text  & append this line 

, 내 텍스트 파일이 이러한 문자열 중 하나 (이 경우, delima)가 있는지 알고 여기 내 코드입니다 . 그러나 내 출력은 다음과 같습니다.

first line 
text  & append this line 

발생하지 않을 것입니다. 내가 원하는 출력은 다음과 같습니다 그것이 delima를 포함하지 않는 것처럼 내 텍스트 파일의 두 번째 줄을 해석 왜

first line text  & append this line 

는 아는 사람 있나요, 그것은 명확하지 않더라도? 어떤 도움을 주시면 감사하겠습니다. 나는이 문제가 if 문과 관련이 있다고 확신하지만, 분명히 여기서 전문가가 아니다.

+5

'contains()'**는 ** 정규 표현식을 사용하지 않습니다! – jlordo

+0

그게 간단합니까? 감사! 편집 : 일반 정규 5 공백, &, 및 다른 공백으로 정규식을 바꾸려고 시도하고 내 출력 변경되지 않았습니다. 즉, 모든 행에 앰퍼샌드를 추가하는 것이 유일한 방법입니다. –

+2

이것은 [XY 문제] (http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem)와 조금 비슷합니다. 해결하려는 근본적인 문제는 무엇입니까? –

답변

2

String.contains() 메서드는 정규 표현식이 아닌 정확한 문자열과 일치합니다.

대신 String.matches()을 사용해 볼 수 있습니다. 과 유사한 동작을 얻으려면 패턴을 조정해야 할 수도 있습니다 (일부 예제에서는 this page 참조).

+0

String.matches()를 사용하면 delima와 정확히 일치하는 문자열 만 추가 할 수 있습니까? 아니면 와일드 카드로 보내는 방법이 있습니까? –

+1

@ItsanAlias ​​내가 링크 된 페이지를 보셨습니까? 그것은 와일드 카드 매칭을 보여줍니다 (그러므로 나는 링크하는 것이 현명한 것이라고 생각했습니다). –

+0

방금 ​​했어요. 고마워요. String Delima를 ". * \\ s + \\ s + \\ s + \ s \ \ s + & \\ s +. *"로 설정했지만 아직 일치하지 않습니다. 왜 그런가? –

관련 문제