2014-06-06 2 views
0

수많은 텍스트와 함께이 형식으로 텍스트 파일에서 특정 데이터를 추출하는 효율적인 방법을 찾는 데 어려움이 있습니다. 두 배의 양이 txt 파일의 모든 라인에 변화스캐너를 사용하여 텍스트 파일에서 특정 정보 선택하기

<"Name" "double" "double" "double" [...]> 

,
는 내가 txt 파일의 모든 라인의 첫 번째 더블을 골라에만 관심이 있습니다.

Scanner doubleScan = new Scanner(System.in).useDelimiter("(\\w)(\\s+)"); 
String[] columnOne = elementScan.next().split(" "); 

스캐너가 정규식과 기대 만들려고 노력하지만 정말 라인에 두 배의 경우 알 수없는 양을 작동하지 않습니다

내가 할 노력하고 있어요 방법은 함께. 그런 다음 모든 선택 항목을 저장하려고합니다 (모든 줄의 첫 번째 줄)는 배열로 두 배가됩니다.

스캐너 만 있으면 도움이 될 것입니다.

+0

파일을 구문 분석하려면 스캐너를 사용하고 파일을 한 줄씩 읽으려면 BufferedReader를 사용하십시오. – DCarochoC

+0

정말 스캐너로 처리해야합니까? 귀하의 코드 예제에서 당신은'split'을 사용하고 있으므로 어쨌든 순수한 스캐너 솔루션이 아닙니다. – Pshemo

+0

'split'을 사용할 수 있다면'next()'대신'nextLine()'을 사용하여 전체 줄을 얻은 다음 공간에서 분할하고 결과 배열의 요소 [1]을 읽습니다. BTW 당신은 ​​루프에서 그것을해야 할 것이다. – Pshemo

답변

1

scanner.nextLine()을 사용하여 줄 단위로 읽고 plit 메서드를 사용하여 배열에서 두 번째 요소를 가져올 수 있습니다. 또는 스캐너 만 사용하는 경우 너무 분분하다면 각 줄마다 다른 스캐너를 만들고 nextDouble() 방법을 사용하여 두 번 검사 할 수 있습니다. 예.

import java.io.File; 
import java.io.FileNotFoundException; 
import java.util.Scanner; 

public class Application { 
    public static void main(String[] args) { 
     try { 
      File file = new File("test.txt"); 
      Scanner fileScanner = new Scanner(file); 
      while (fileScanner.hasNext()) { 
       Scanner lineScanner = new Scanner(fileScanner.nextLine()); 
       while (lineScanner.hasNext()) { 
        if (lineScanner.hasNextDouble()) { 
         System.out.println("First Double :" + lineScanner.nextDouble()); 
         break; 
        } else { 
         lineScanner.next(); 
        } 
       } 
       lineScanner.close(); 
      } 
      fileScanner.close(); 
     } catch (FileNotFoundException e) { 
      e.printStackTrace(); 
     } 
    } 
} 
+1

작성하는 데 꽤 시간이 걸렸음에 틀림없는 해답, +1 :) – zx81

관련 문제