8146df9b9642bc779486f11dd0062df6.gif

在后台开发中,我们可能需要在运行的时候传递一些参数进去,该怎么处理呢?

Java 提供了一个 Scanner 类,利用这个类,我们可以很方便的获取键盘输入的参数。在这里我将 Scanner 类的使用和注意事项作了一些汇总分享给大家。

Scanner 是一个基于正则表达式的文本扫描器,可以从文件,输入流,字符串中解析出基本类型和字符串类型的值。Scanner 类提供了多个构造器,不同的构造器可以接受文件,输入流,字符串作为数据源,用于从文件,输入流字符串中解析数据。

1、使用 Scanner 获取键盘输入

Scanner 键盘输入流程:
  • 首先导包:
import java.util.Scanner; 
  • 创建 Scanner 对象:
//System.in 表示标准化输入流,也就是键盘输入
Scanner sc = new Scanner(System.in);
  • 将键盘输入的数据存到程序中:
//利用hasNextXXX()判断是否还有下一输入项
if(sc.hasNext()) {
    //利用nextXXX()返回键盘输入的内容
    String str = sc.next();
    System.out.println(str);
}
代码示例1
import java.util.Scanner;

/**
 * 使用Scanner在程序需要的时候输入参数
 */
public class TestScanner {

	public static void main(String[] args) {

		Scanner sc = new Scanner(System.in);
		System.out.println("请输入用户名:");
		String name = sc.nextLine();
		System.out.println("请输入密码:");
		String pwd = sc.next();
		System.out.println("请输入年龄:");
		int age = sc.nextInt();
		System.out.println("请输入爱好:");
		String hobby1 = sc.next();
		String hobby2 = sc.next();
		String hobby3 = sc.next();
		System.out.println("===============键盘输入数据演示===============");
		System.out.println("用户名:" + name);
		System.out.println("密码:" + pwd);
		System.out.println("年龄:" + age);
		System.out.println("爱好:" + hobby1 + "t" + hobby2 + "t" + hobby3);
	}
}
运行演示

92aa75daec67a76d419fc88449b132f6.gif

2、next() 方法与 nextLine() 方法的区别

前面示例中我们可以看到,next() 方法和 nextLine() 方法都是用来接收字符串的方法,但是二者在某些特定情况又各有特性。

  • next() 方法遇空格停止接收特性
代码示例2
import java.util.Scanner;

/**
 * 使用Scanner在程序需要的时候输入参数
 */
public class TestScanner {

	public static void main(String[] args) {

		Scanner sc = new Scanner(System.in);
		System.out.println("请输入用户名:");
                //遇到空格停止接收
		String name = sc.next();
		System.out.println("用户名:" + name);
	}
}
运行演示:

a0b8ca8a0646863877a5dad8845318d9.gif

我们发现,如果输入的用户名中间有空格的话,空格后面的字符串没有打印。而正是利用这个特性,我们可以使用空格同时输入多个字符串分别接收,也就是说我们的代码示例1中的爱好可以如下接收:

6e94c3a8abf1e7b562e230d8131e3772.gif
  • nextLine() 方法可以接收包含空格的字符串,即接收一行字符串。
import java.util.Scanner;

/**
 * 使用Scanner在程序需要的时候输入参数
 */
public class TestScanner {

	public static void main(String[] args) {

		Scanner sc = new Scanner(System.in);
		System.out.println("请输入用户名:");
                //接收一行字符串
		String name = sc.nextLine();
		System.out.println("用户名:" + name);
	}
}
运行演示:

3e2892896089a775021a6c335bcbe425.gif

常见问题及解决方案

import java.util.Scanner;

/**
 * Scanner 常见问题及解决方案:
 */
public class TestScanner {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);	
		System.out.println("请输入数字:");
		int num = sc.nextInt();
		System.out.println("num为:"+num);
		System.out.println("请输入字符串:");
		String str = sc.nextLine();
		System.out.println("str为:"+str);
	}
}
运行演示:

b2e42d74a7ecb5dcf2e3d2a5649d3ade.gif

我们发现键盘只输入了一个数字程序就执行完了,后面的字符串还没有输入就执行完了,这是因为是 nextInt() 方法读取到回车前的数据,而 nextLine() 方法遇到回车就停读。所以我们在使用 nextLine() 方式时最好新建一个 Scanner 对象,用新的 Scanner 对对象接收键盘输入的字符串,这样就可以很好的避免 nextLine() 方法遇到回车就停读问题。

在最后总结下基本数据类型所对应的Scanner对象方法返回值类型有:

nextByte()、 nextInt()、 nextShort()、 nextLong()、

nextFloat()、 nextDouble()、 nextBoolean()

就是没有 char 所对应的返回值类型。

解决方法如下:

char ch1 = new Scanner(System.in).next().charAt(0);

以上就是 Java 利用 Scanner 获取键盘输入的个人总结,有问题的请留言!

Logo

魔乐社区(Modelers.cn) 是一个中立、公益的人工智能社区,提供人工智能工具、模型、数据的托管、展示与应用协同服务,为人工智能开发及爱好者搭建开放的学习交流平台。社区通过理事会方式运作,由全产业链共同建设、共同运营、共同享有,推动国产AI生态繁荣发展。

更多推荐