scanNextInt()忽略空行

时间:2012-12-05 14:24:25

标签: java

我使用此代码:

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

当我按回车或发送空行时,我需要在循环(hasNexInt())时结束。

我尝试使用String == null e.t.c.的一些方法,但Java只是IGNORE空行

输出

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 个答案:

答案 0 :(得分:1)

只需使用:

String line = null;
while(!(line = keyboard.nextLine()).isEmpty()) {
// Your actions
}

答案 1 :(得分:1)

在第二个hasNextInt()循环中使用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();
        }

答案 2 :(得分:1)

如果您的应用中扫描仪的使用不是绝对必须的,我可以提供:

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

此代码肯定会从控制台的空行停止。现在您可以使用Scanner进行行处理或正则表达式。

答案 3 :(得分: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);
            }