在本教程中,我们将借助示例学习Java Scanner及其方法。
java.io包的PrintWriter类可用于以通常可读的形式(文本)写入输出数据。
java.util包的Scanner类用于从不同的源(例如输入流,用户,文件等)读取输入数据。让我们举个实例。
import java.util.Scanner; class Main { public static void main(String[] args) { //创建一个对象 Scanner Scanner input = new Scanner(System.in); System.out.print("输入姓名: "); // 从键盘接收输入 String name = input.nextLine(); // 打印输出姓名 System.out.println("我的名字是 " + name); // Closes the scanner input.close(); } }
输出结果
输入姓名: Jack 我的名字是 Jack
在上面的示例中,请注意以下行
Scanner input = new Scanner(System.in);
在这里,我们创建了一个名为input的Scanner对象。
System.in参数用于从标准输入中获取输入。 就像从键盘上获取输入一样。
然后,我们使用Scanner类的nextLine()方法从用户那里读取一行文本。
现在您对Scanner有了一些了解,让我们对其进行更多的探索。
从上面的示例可以看到,我们需要先导入java.util.Scanner包,然后才能使用Scanner类。
import java.util.Scanner;
如上所述,导入包后,就可以创建Scanner对象。
//从输入流中读取输入 Scanner sc1 = new Scanner(InputStream input); //从文件读取输入 Scanner sc2 = new Scanner(File file); //从字符串中读取输入 Scanner sc3 = new Scanner(String str);
在这里,我们创建了Scanner类的对象,这些对象将分别从InputStream,文件和字符串读取输入。
Scanner类提供各种方法,使我们能够读出不同类型的输入。
方法 | 描述 |
---|---|
nextInt() | 从用户读取int值 |
nextFloat() | 从用户读取float值 |
nextBoolean() | 从用户读取boolean值 |
nextLine() | 从用户读取一行文本 |
next() | 从用户那里读取一个单词 |
nextByte() | 从用户读取byte值 |
nextDouble() | 从用户读取double值 |
nextShort() | 从用户读取short值 |
nextLong() | 从用户读取long值 |
import java.util.Scanner; class Main { public static void main(String[] args) { //创建扫描器对象 Scanner input = new Scanner(System.in); System.out.println("输入一个整数: "); //读取一个int值 int data1 = input.nextInt(); System.out.println("使用 nextInt(): " + data1); input.close(); } }
输出结果
输入一个整数: 22 使用 nextInt(): 22
在上面的示例中,我们使用了nextInt()方法来读取整数值。
import java.util.Scanner; class Main { public static void main(String[] args) { //创建一个Scanner对象 Scanner input = new Scanner(System.in); System.out.print("输入双精度值: "); //读取双精度值 double value = input.nextDouble(); System.out.println("使用 nextDouble(): " + value); input.close(); } }
输出结果
输入双精度值: 33.33 使用 nextDouble(): 33.33
在上面的示例中,我们使用了nextDouble()方法来读取浮点值。
import java.util.Scanner; class Main { public static void main(String[] args) { //创建一个Scanner对象 Scanner input = new Scanner(System.in); System.out.print("Enter your name: "); //读取整个单词 String value = input.next(); System.out.println("Using next(): " + value); input.close(); } }
输出结果
Enter your name: Jonny Walker Using next(): Jonny
在上面的示例中,我们使用next()方法从用户读取字符串。
在这里,我们提供了全名。 但是,next()方法仅读取名字。
这是因为next()方法将输入读取到空格字符。一旦遇到空格,它就返回字符串(不包括空格)。
import java.util.Scanner; class Main { public static void main(String[] args) { //创建一个Scanner对象 Scanner input = new Scanner(System.in); System.out.print("Enter your name: "); //读取整行 String value = input.nextLine(); System.out.println("Using nextLine(): " + value); input.close(); } }
输出结果
Enter your name: Jonny Walker Using nextLine(): Jonny Walker
在第一个示例中,我们使用了nextLine()方法从用户读取字符串。
与next()不同,nextLine()方法读取包括空格在内的整个输入行。当该方法遇到下一行字符\n时终止。
Java扫描程序还可以用于读取大整数和大十进制数。
nextBigInteger() - 从用户读取大整数值
nextBigDecimal() - 从用户读取大十进制值
import java.math.BigDecimal; import java.math.BigInteger; import java.util.Scanner; class Main { public static void main(String[] args) { //创建一个Scanner对象 Scanner input = new Scanner(System.in); System.out.print("输入一个大整数: "); //读取大整数 BigInteger value1 = input.nextBigInteger(); System.out.println("Using nextBigInteger(): " + value1); System.out.print("输入一个大十进制: "); //读取大十进制 BigDecimal value2 = input.nextBigDecimal(); System.out.println("Using nextBigDecimal(): " + value2); input.close(); } }
输出结果
输入一个大整数: 987654321 使用 nextBigInteger(): 987654321 输入一个大十进制: 9.55555 使用 nextBigDecimal(): 9.55555
在上面的示例中,我们使用java.math.BigInteger和java.math.BigDecimal包分别读取BigInteger和BigDecimal。
扫描器类读取整个行,并将该行划分为记号。令牌是对Java编译器有一定意义的小元素。例如
假设有一个输入字符串:
He is 22
在这种情况下,扫描程序对象将读取整行并将该字符串分为令牌:“ He ”,“ is ”和“ 22 ”。然后,对象遍历每个令牌,并使用其不同方法读取每个令牌。
注意:默认情况下,空格用于划分标记。