0

次の内容のテキスト ファイルがあります (区切り文字は単一のスペースです)。

1231 2134 143 wqfdfv -89 rwq f 8 qer q2
sl;akfj salfj 3 sl 123

私の目的は、整数と文字列を別々に読み取ることです。それらを解析する方法がわかったら、別の出力ファイルを作成して保存します (ただし、私の質問は、このテキスト ファイルを解析する方法を知ることだけです)。

Scanner を使用してみましたが、最初の inetger を超えることができません:

Scanner s = new Scanner (new File ("a.txt")).useDelimiter("");
while (s.hasNext()){
System.out.print(s.nextInt());}

そして出力は

1231

両方の行から他の整数を取得するにはどうすればよいですか?

私の希望のアウトアウトは次のとおりです。

1231 
2134 
143
-89
8
3 
123
4

2 に答える 2

4

ファイルからデータを読み取る場合、すべて文字列型として読み取ります。次に、 を使用して解析して数値かどうかをテストしInteger.parseInt()ます。例外をスローする場合は文字列、それ以外の場合は数値です。

while (s.hasNext()) {
    String str = s.next();
    try { 
        b = Integer.parseInt(str); 
    } catch (NumberFormatException e) { // only catch specific exception
        // its a string, do what you need to do with it here
        continue;
    }
    // its a number
 } 
于 2012-07-30T22:39:31.317 に答える
4

区切り文字は、少なくとも 1 つ以上の空白など、別のものにする必要があります

Scanner s = new Scanner (new File ("a.txt")).useDelimiter("\\s+");
while (s.hasNext()) {
    if (s.hasNextInt()) { // check if next token is an int
        System.out.print(s.nextInt()); // display the found integer
    } else {
        s.next(); // else read the next token
    }
}

そして、この単純なケースでは、gotuskar のソリューションの方が優れていることを認めなければなりません。

于 2012-07-30T22:43:05.367 に答える