2012-01-22 5 views
1

여러 줄의 숫자가 쉼표로 구분 된 파일에서 개별 숫자를 읽으려고합니다.Java 스캐너가 0 길이 문자열을 반환하지 못하게하는 올바른 정규식

try { 
     Scanner fileScanner = new Scanner(new FileReader(unsolvedBoardLocation)); 
     Pattern myPattern = Pattern.compile("[,\\r\\n]"); 
     System.out.println(myPattern.pattern()); 
     fileScanner.useDelimiter(myPattern); 

     while(fileScanner.hasNext()) { 
      int i = fileScanner.nextInt(); 
      System.out.print(i); 

     } 
    } 
    catch(IOException ex) { 
     Logger.getLogger(SudokuBoard.class.getName()).log(Level.SEVERE, null, ex); 
    } 

내가 읽고있다 파일의 내용이 더 공백이없고 다음과 같습니다 : 내가 함께이 일을하고있는 자바 코드는 내가 Windows에서 텍스트 파일을 생성하기 때문에

8,0,0,9,3,0,0,0,2 
0,0,9,0,0,0,0,4,0 

나는 알고있다 그 다음에 \ r \ n이 있습니다 2. 프로그램의 원래 버전에서는 검사기가 2 \ r \ n을 돌려 주었기 때문에 \ r \ n을 구분 기호에 추가하여이를 방지하려고 시도했지만 여전히 문제가있다. InputMissmatchException이 발생합니다. 전체 스택 추적은 다음과 같습니다

Exception in thread "main" java.util.InputMismatchException 
at java.util.Scanner.throwFor(Scanner.java:909) 
at java.util.Scanner.next(Scanner.java:1530) 
at java.util.Scanner.nextInt(Scanner.java:2160) 
at java.util.Scanner.nextInt(Scanner.java:2119) 
at my.puzzle.sudoku.SudokuBoard.<init>(SudokuBoard.java:31) 
at my.puzzle.sudoku.Sudoku.main(Sudoku.java:8) 
    Java Result: 1 

내가 스캐너는 이쪽 2. 종료 후 ""반환하기 때문에이 예외를 얻고있다 이유는 nextInt()를 따라서, 기대 던지는 무엇되지 않은 생각 오류. 이 문제를 방지하기 위해 노력하고 있지만 그냥 정규식으로이 작업을 수행하는 방법을 잘 모르겠습니다. 입력 파일을 생성하고 있기 때문에 공백으로 형식을 지정하고 작동 시키면됩니다. 또한 각 토큰을 문자열로 읽고 문자열이 유효한 숫자로 읽혀 지는지 확인하고 그렇지 않은 경우 다음 토큰으로 이동할 수 있는지 확인합니다. 그러나, 내 자신의 학습 목적을 위해 정규식으로 만 수행 할 수있는 방법을 알고 싶습니다. 나는 이미 정규식에 대한 자바 튜토리얼을 읽었지만 정규식을 사용한 적이 한번도 없다.

분명히하려면 "정규식이이 시나리오에서 길이가 0 인 문자열을 반환하지 못하게하는 방법"입니다.

내가 얻을 수있는 도움을 주시면 감사하겠습니다. 미리 감사드립니다!

+0

'\ r'을 구분자로보고, 다음 구분자로'\ n'을 인식하기 전에 길이가 0 인 문자열을 보는 스캐너입니까? 그런 경우 패턴으로'[, \\ r \\ n] +'를 사용할 수 있습니까? –

+0

'[, \\ r \\ n] + '패턴으로 시도하십시오. –

+0

와우, 그랬어. 나는 [, \\ r \\ n +] 및 다양한 변형을 시도했지만 regex 클래스 외부에 추가하지 않았습니다. 너무 단순해서 바보 같아. 정말 고마워!! – Jared

답변

0

$으로 정규식을 끝내거나 \d을 시도하십시오.

관련 문제