2012-01-22 6 views
1

複数の行をカンマで区切ってファイルから個々の番号を読み取ろうとしています。私はこれをやっているJavaコードは次のとおりです。Javaスキャナがゼロ長文字列を返さないように正規表現を修正する

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

私が読んでいたファイルの内容には空白を持っていないと、次のとおりです。

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

私が知っている、Windowsのテキストファイルを作成したので、 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()はこのように投げて、期待しているものではありません「」戻っているので、私はこの例外を取得していた理由があると思いますエラー。私はこれを防止しようとしていますが、私はちょうど正規表現でこれを行う方法がわかりません。私は入力ファイルを生成しているので、空白で単純にフォーマットして動作させることができます。また、各トークンを文字列として読み取って、その文字列が有効な数値として読み取られているかどうかをチェックし、そうでない場合は次のトークンに移動することもできます。しかし、私自身の学習目的のために、正規表現だけでどのように行うことができるか知りたいと思います。私はすでに正規表現についてのJavaチュートリアルを読んでいますが、私は以前正規表現を使ったことがなく、苦労しています。

私の質問をクリアするにはどうすれば正規表現がこのシナリオで長さゼロの文字列を返すのを防ぐのですか?

私が得ることができたどんな助けもありがとうございます。前もって感謝します!

+0

「\ r」を区切り文字と見なすスキャナであり、次に\ nを次の区切り文字として認識するには長さゼロの文字列ですか? その場合、パターンとして '[、\\ r \\ n] +'を使用できますか? –

+0

'[、\\ r \\ n] + 'パターンで試してください。 –

+0

うわー、それはそれをしました。私は[、\\ r \\ n +]、それにさまざまなバリエーションを試しましたが、regexクラスの外には追加しませんでした。それはとてもシンプルだったので、愚かな気分になりました。本当にありがとう!! – Jared

答えて

0

$で正規表現を終了するか、\dを試してください。

関連する問題