java - 为什么scanner.hasNextInt() 方法需要一个字母来开始处理数字?
问题描述
我正在尝试使用scanner.hasNextInt() 方法从用户那里获取一些整数输入。它工作得很好,但我需要输入一个字母让程序知道我已经完成了输入整数,而我希望控制台知道在我在一行之后按下回车键之后。
例如,我输入 (1 2 3 y enter) 并且程序运行良好,但如果我输入 (1 2 3 enter enter) 则没有任何反应,即使我一直按 enter 键。这是我的代码的相关部分,如果你需要看一下。
public class Main {
static LinkedList linkedList =new LinkedList();
public static void main(String [] args){
System.out.println("enter integer numbers");
Scanner scanner=new Scanner(System.in);
while (scanner.hasNextInt()){
linkedList.append(scanner.nextInt());
}
print();
}
}
解决方案
三步就懂了。
Scanner
使用分隔符将输入分解为标记,默认分隔符为\p{javaWhitespace}+
. 尝试Scanner scanner = new Scanner(System.in); System.out.println(scanner.delimiter());
\p{javaWhitespace}
等价于java.lang.Character.isWhitespace()
,所以\p{javaWhitespace}+
将匹配多个字符 其中isWhitespace
.key 产生的换行符
enter
是一个空格。当您输入多个enter
s 时,它们将被识别为分隔符,而不是标记。
您可以使用 s 单个空格,因此它将第二个enter
作为标记:
scanner.useDelimiter("\\p{javaWhitespace}");
推荐阅读
- mongodb - 无法解析主机 mongo、elasticsearch
- css - 如何在两个浮点数之间居中元素
- mfc - MFC CDateTimeCtrl::SetMonthCalColor 不起作用
- postgresql - 在 Jetbrains Datagrip 中使用 PostgreSQL \copy 命令创建批处理文件
- asp.net-core - 在 ASP.NET Core 5 中使用存储过程和表值函数的最佳方法
- artifactory - 如何仅将 Artifactory 绑定到本地主机?
- javascript - 我的生产网站没有找到 url node_modules bootstrap 和 Jquery
- azure - 尝试使用策略禁用 Azure 安全中心建议
- apache-kafka - 启动 kafka-connect 时出错 - 错误的幻数
- javascript - 在父组件创建问题之前安装在子组件中