我昨晚开始处理CodeAbbey问题,他们提到使用stdIn,因为一些输入数据很长,所以复制/粘贴比手工更容易。我之前从未使用过扫描仪,所以它看起来很容易。我得到它的单线输入工作然后我遇到输入的问题:
867955 303061
977729 180367
844485 843725
393481 604154
399571 278744
723807 596408
142116 475355
我认为nextLine会读每一对,xxxx yyyyy。如果nextLine不为空,我将代码放在while循环中。它运行,但我得到奇怪的输出,并且只有在我返回几次之后。
package com.secryption;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
System.out.println("Input: ");
Scanner scanner = new Scanner(System.in);
String input = "";
while(!(scanner.nextLine().isEmpty())) {
input = input + scanner.nextLine();
}
String[] resultSet = input.split("\\s+");
for(String s : resultSet) {
System.out.println(s);
}
}
}
我认为在将scanner.nextLine()添加到输入后可能需要一些东西。我尝试了一个空间,但没有帮助。我尝试了换行,但没有让它变得更好。
这个“应该”将所有数字放在一个数组中,没什么特别的。扫描仪我错过了什么?
编辑:好的,所以@Luiggi门多萨是对的。我找到了这个How to terminate Scanner when input is complete?帖子。所以基本上它起作用了,我只是期望它能做点什么。答案 0 :(得分:1)
问题在于:
while(!(scanner.nextLine().isEmpty())) {
input = input + scanner.nextLine();
}
Scanner#nextLine
读取该行并继续阅读。你正在阅读两行而不是存储第一行读取的结果,只是读取和存储第二行的结果。
只需将上面的代码更改为:
StringBuilder sb = new StringBuilder();
while(scanner.hasNextLine()) {
sb.append(scanner.nextLine()).append(" ");
}
答案 1 :(得分:0)
hasNext()是一个文件结束指示符,它通过组合Mac上的键控制d来终止,而Windows上的控件z按下回来将不会发送正确的消息 到JVM