如何使用Java Scanner测试空行?
我期待扫描仪的输入,直到什么都没有(即,当用户输入一个空行)。我如何做到这一点 我试过:如何使用Java Scanner测试空行?,java,java.util.scanner,Java,Java.util.scanner,我期待扫描仪的输入,直到什么都没有(即,当用户输入一个空行)。我如何做到这一点 我试过: while (scanner.hasNext()) { // process input } 但这会让我陷入困境这里有一个方法: Scanner keyboard = new Scanner(System.in); String line = null; while(!(line = keyboard.nextLine()).isEmpty()) { String[] values = lin
while (scanner.hasNext()) {
// process input
}
但这会让我陷入困境这里有一个方法:
Scanner keyboard = new Scanner(System.in);
String line = null;
while(!(line = keyboard.nextLine()).isEmpty()) {
String[] values = line.split("\\s+");
System.out.print("entered: " + Arrays.toString(values) + "\n");
}
System.out.print("Bye!");
发件人:
问:如果我用Java的扫描器扫描一个空行,会发生什么
A:看情况。如果您使用的是nextLine(),则将读取一个空行
以空字符串形式输入。这意味着,如果您要存储空白
在字符串变量中,该变量将包含“”。不会的
存储“”或放置了多少空间。如果使用的是next(),
然后它将根本不读取空白行。他们完全被跳过了
我猜
nextLine()
仍将在空行上触发,因为从技术上讲,扫描仪将具有空字符串“
”。因此,您可以检查如果s.nextLine().equals(“”)是正确的,scanner.hasNext()
将始终为真,循环不会结束,因为即使字符串输入为空,也始终存在字符串输入
我也遇到了同样的问题,我这样解决:
do{
// process input
}while(line.length()!=0);
do{
//过程输入
}while(line.length()!=0);
我认为do-while
更适合这里,因为您必须在用户输入后评估输入。建议使用scanner.nextLine()
的问题是,它实际上会以字符串的形式返回下一行。这意味着那里的任何文本都会被消费。如果你有兴趣扫描那一行的内容…好吧,太糟糕了!您必须自己解析返回的字符串的内容
Scanner key = new Scanner(new File("data.txt"));
String data = "";
while(key.hasNextLine()){
String nextLine = key.nextLine();
data += nextLine.equals("") ? "\n" :nextLine;
}
System.out.println(data);
更好的方法是使用
while (scanner.findInLine("(?=\\S)") != null) {
// Process the line here…
…
// After processing this line, advance to the next line (unless at EOF)
if (scanner.hasNextLine()) {
scanner.nextLine();
} else {
break;
}
}
由于(?=\S)
是一个零宽度的先行断言,因此它永远不会使用任何输入。如果在当前行中找到任何非空白文本,它将执行循环体
您可以省略否则中断代码>如果您确定循环体已经使用了该行中的所有非空白文本。这会产生一个副作用,即已经获取了该行(例如,如果我想解析由空格分隔的值,我需要按空格分割该行)。是否有一个hasNextLine()
type方法,其中“指针”不会转到下一行?@jiewmeng-当您调用scanner.hasNext()
时,您仍需要提取该行以检查它是否为空并处理它。你能解释一下为什么巴特的回答对你不起作用吗?分割行的问题是它违背了扫描仪的目的,这就是它帮助你进行标记化。