0

私はこのコードを使用します:

public String processFile(Scanner scanner) {
    String result = "";
    SumProcessor a = new SumProcessor();
    AverageProcessor b = new AverageProcessor();
    String line = null;
    while (scanner.hasNext()) {

        if (scanner.hasNext("avg") == true) {

            c = scanner.next("avg");
           while(scanner.hasNextInt()){

                int j = scanner.nextInt();
                a.processNumber(j);
            }
           System.out.println("Exit a");
            result += a.getResult();
            a.reset();
        }
        if (scanner.hasNext("sum") == true) {

            c = scanner.next("sum");
           while(scanner.hasNextInt()){

          int j = scanner.nextInt();
                b.processNumber(j);                    
            }
            System.out.println("Exit b");
             result += b.getResult();
             b.reset();
        }

    }
    return result;
}

そして、Enterキーを押すか、空の行を送信するときに、サイクル(hasNexInt())中に終了する必要があります。

String == nullなどでいくつかのメソッドを使用しようとしましたが、Javaは空の行を無視します

出力

run:
avg
1
2
3
4

sum
Exit a
1
2
3
4

しかし、私は必要です:

run:
avg
1
2
3
4

Exit a
sum    
1
2
3
4
4

4 に答える 4

1

次のようなものを使用してください。

String line = null;
while(!(line = keyboard.nextLine()).isEmpty()) {
// Your actions
}
于 2012-12-05T14:28:42.120 に答える
1

hasNextInt()2番目のwhileループで使用します。値を渡さないintと、whileループが壊れます。

または、ループを解除するために渡すことができる特定の値を決定することもできます。たとえば、文字を渡して'x'から、「x」が渡されたかどうかを確認し、ループを解除できます。

while (scanner.hasNext()) {
        if (scanner.hasNext("avg") == true) {

            c = scanner.next("avg");
           while (scanner.hasNextInt()){ //THIS IS WHERE YOU USE hasNextInt()                       
                int j = scanner.scanNextInt();
                a.processNumber(j);
            }
           System.out.println("End While");
            result += a.getResult();
            a.reset();
        }
于 2012-12-05T14:30:55.333 に答える
1

アプリでのスキャナーの使用が絶対に必要ではない場合、私はこれを提供できます:

BufferedReader rdr = new BufferedReader(new InputStreamReader(System.in));
for(;;) {
    String lile = rdr.readLine();
    if (lile.trim().isEmpty()) {
        break;
    }
    // process your line
}

このコードは、コンソールからの空の行で確実に停止します。これで、スキャナーをライン処理または正規表現に使用できます。

于 2012-12-05T15:36:44.270 に答える
0

次のように追加scanner.nextLine()して、行の残りのエントリを無視します。

            while (scanner.hasNextLine()){
                String line = scanner.nextLine();
                if("".equals(line)){
                   //exit out of the loop
                   break;
                }
                //assuming only one int in each line
                int j = Integer.parseInt(line);
                a.processNumber(j);
            }
于 2012-12-05T14:29:23.107 に答える