我使用此代码:
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
答案 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);
}