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

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);
}
}运行演示
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);
}
}运行演示:
我们发现,如果输入的用户名中间有空格的话,空格后面的字符串没有打印。而正是利用这个特性,我们可以使用空格同时输入多个字符串分别接收,也就是说我们的代码示例1中的爱好可以如下接收: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);
}
}运行演示:
常见问题及解决方案
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);
}
}运行演示:
我们发现键盘只输入了一个数字程序就执行完了,后面的字符串还没有输入就执行完了,这是因为是 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