引言
在 Java 编程中,与用户进行交互是非常常见的需求,而实现用户输入功能则是交互的重要环节。Java 提供了多种方式来获取用户输入,每种方式都有其特点和适用场景。本文将详细介绍 Java 中常用的输入方法,帮助你在不同的项目中灵活运用。
Scanner输入
Scanner
类是 Java 提供的一个方便的工具类,用于扫描输入流中的数据。它可以处理各种基本数据类型的输入,并且可以根据分隔符分割输入。
在使用Scanner类之前我们要先去创造一个关于Scanner类的对象
Scanner in=new Scanner(System.in);
它有两种比较重要的方法:
1、hasNext
以这个开头的方法,是用于检查输入源中是否还有下一个标记可用,常用的方法有:
hasNext():如果输入源中还有下一个标记(非空格字符),返回 true。
hasNextLine():如果输入源中还有下一行(非空行),返回 true。
hasNextInt():如果输入源中还有下一个整数,返回 true。
hasNextDouble():如果输入源中还有下一个浮点数,返回 true。
hasNextBoolean():如果输入源中还有下一个布尔值,返回 true。
2、next
以这个开头的方法:用于从输入源中获取下一个标记并返回相应的数据类型,常用的有:
next():从输入源中获取并返回一个字符串,默认以空格为分隔符,以回车 Enter 为结束符,回车 Enter 后的内容则放入缓冲区。
nextLine():从输入源中获取并返回一行字符串(以换行符为分隔符)。
nextInt():从输入源中获取并返回一个整数。
nextDouble():从输入源中获取并返回一个浮点数。
nextBoolean():从输入源中获取并返回一个布尔值(“true” 或 “false”)。
而next()和nextLine()有一些不同:
next方法:
读取的字符串不包含分隔符,如果输入中存在多个以空格分隔的单词,next() 方法只会返回第一个单词。在读取之前会忽略输入中的前导空格。
nextLine方法:
从输入源中读取并返回一整行字符串,包括换行符 \n 在内。
它会读取输入源中的全部内容直到遇到换行符,或者输入结束。
nextLine() 方法返回的字符串可以包含空格和其他特殊字符。
例如,用两种方法来读取大小未知的一维数组
描述:输入若干个整数,整数之间用空格分隔。请将这些整数保存到数组 nums 中,然后将其打印出来。
(1)使用 nextInt() 逐个读取:
class Solution {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
List<Integer> nums = new ArrayList<>();
while (scanner.hasNextInt()) {
nums.add(scanner.nextInt());
}
System.out.println("数组 nums 的元素为:");
for (int num : nums) {
System.out.print(num + " ");
}
scanner.close();
}
}
注意事项:
如果在控制台手动输入若干个整数,期望手动停止输入后,程序结束读取整数,可以使用其他方式来指示结束输入的条件。一种常见的方式是通过输入特定的字符或字符串来表示结束;
由于是逐个读取,因此事先不知道数组的长度,所以上面代码中使用 list 来存储;
(2)使用 nextLine() 先全部读取,然后逐个解读:
class Solution {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String input = scanner.nextLine();
input = input.trim(); //这个是可以去除字符串首尾的所有空白字符(空格,换行符等等)
String[] numStrings = input.split("\\s+");
int[] nums = new int[numStrings.length];
for (int i = 0; i < numStrings.length; i++) {
nums[i] = Integer.parseInt(numStrings[i]);
}
System.out.println("\n数组 nums 的元素为:");
for (int num : nums) {
System.out.print(num + " ");
}
scanner.close();
}
}
解释:代码的split()方法是可以根据正则表达式将字符串分割成多个字符串,并返回一个包含这些子字符串的数组。
正则表达式“\\s+”:
-
\s
是正则表达式中的元字符,表示任意空白字符,包括空格、制表符、换行符等。 -
+
是正则表达式中的量词,表示前面的元素(这里是\s
)出现一次或多次。 -
由于在 Java 字符串中,反斜杠
\
是转义字符,所以要表示正则表达式中的\s
,需要写成\\s