2013-07-24 4 views
0

내 응용 프로그램에서 한 가지 문제가 있습니다. 하나의 문자열 변수에 적용하기 위해 검색해야하는 코드가 들어있는 텍스트 파일이 하나 있습니다. 이 문제를 해결하는 가장 좋은 방법은 무엇입니까? 아래 샘플을 실행했지만 논리적으로 부정확하거나 불완전합니다.txt 파일에서 정보를 가져 오는 중 문제가 발생했습니다.

  1. 라인을 통해 읽기 :

    BufferedReader bfr = new BufferedReader(new FileReader(Node)); 
    
    String line = null; 
    try { 
        while((line = bfr.readLine()) != null){ 
         line.contentEquals("d.href"); 
         System.out.println(line); 
        } 
    } catch (IOException e) { 
        // TODO Auto-generated catch block 
        e.printStackTrace(); 
    } 
    
  2. 문자를 읽기 :

    BufferedReader bfr = new BufferedReader(new FileReader(Node)); 
    int i = 0; 
    try { 
        while ((i = bfr.read()) != -1) { 
         char ch = (char) i; 
         System.out.println(Character.toString(ch)); 
        } 
    } catch (IOException e) { 
        // TODO Auto-generated catch block 
        e.printStackTrace(); 
    }; 
    
  3. 스캐너를 통해 읽기 :

    BufferedReader bfr = new BufferedReader(new FileReader(Node)); 
    BufferedReader bfr = new BufferedReader(new FileReader(Node)); 
    int wordCount = 0, totalcount = 0; 
    Scanner s = new Scanner(googleNode); 
    while (s.hasNext()) { 
        totalcount++; 
        if (s.next().contains("(?=d.href).*?(}=?)")) wordCount++; 
    } 
    System.out.println(wordCount+" "+totalcount); 
    
보세요

With (1.) 코드 조각의 시작 부분이 포함 된 d.href을 찾기가 어렵습니다.
With (2.) d.href을 문자열로 저장하고 나머지 정보를 검색하는 방법 중 하나를 생각하거나 찾을 수 없습니다.
With (3.) 정확하게 d.href을 찾을 수 있지만 txt 조각을 검색 할 수 없습니다.

아무에게 도와 줄 수 있습니까?

+0

'다음'은 공백으로 구분 된 텍스트를 검색하기 때문에'스캐너 '에 문제가있을 수 있습니다. 구분자를 설정해야 할 수도 있습니다 ('setDelimiter'로, 또는 그것이 무엇이라고 부름인지 생각해보십시오). 또는'next' 대신에'nextLine'을 사용하십시오. – Dukeling

+0

정확히 무엇을 하려는지 이해하기 어렵습니다. 샘플 입출력을 줄 수 있습니까? – Dukeling

답변

1

제 질문에 대한 답변으로 스캐너를 사용하여 텍스트 파일에서 한 단어 씩 읽습니다. .contains("window.maybeRedirectForGBV")은 하나의 부울 값을 반환하고 hasNext()은 하나의 문자열을 반환합니다. 그런 다음 텍스트 파일에서 내 코드 스트레치에 대한 쿼리를 중단 한 다음에 한 단어 변수 값에 다음 단어의 값을 저장하기 위해 한 번 더 이동했습니다. 이 시점에서 원하는대로 문자열을 처리하면됩니다. 희망이 도움이됩니다.

String stringSplit = null; 
      Scanner s = new Scanner(Node); 
      while (s.hasNext()) { 

      if (s.next().contains("window.maybeRedirectForGBV")){ 
       stringSplit = s.next(); 
       break; 
      } 
      } 
0

이 같은 정규 표현식을 사용할 수 있습니다

Pattern pattern = Pattern.compile("^\\s*d\\.href([^=]*)=(.*)$"); 
// Groups:          1-----1 2--2 
// Possibly spaces, "d.href", any characters not '=', the '=', any chars. 

.... 
    Matcher m = pattern.matcher(line); 
    if (m.matches()) { 
     String dHrefSuffix = m.group(1); 
     String value = m.group(2); 
     System.out.println(value); 
     break; 
    } 

의 BufferedReader 할 것입니다.

+0

코드를 읽을 수있는 한 이해할 만하지만 그걸로 아무런 성공을 거두지 못했습니다. 심지어 콘솔로 바뀌지 않았습니다. 심지어 Pattern Pattern = Pattern.compile ("d.href")로 바뀌 었습니다. 또는 Pattern pattern = Pattern.compile ("a"); –

+0

'match'는 _entire 줄에서 일치합니다. 'while (m.find())'가 대안입니다. 이 코드는'\ * s *'(공백) 대신'. * \\ b' (모든 문자, 단어 경계)와 관련이 있습니다. –

+0

도움을 주셔서 감사합니다. 제 경우에는 앞으로 나아갈 다른 방법을 찾았지만, 제 대답을 확인하십시오. –

관련 문제