企业🤖AI Agent构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
[TOC] # Scanner ## 介绍 Scanner类是**引用数据类型**的一种,我们可以使用该类来完成用户键盘录入,获取到录入的数据。 ## 方法 ~~~ 构造方法 public Scanner(InputStream source) 判断是否有指定数据 public boolean hasNextXX(); 取出数据 public String nextXX(); ~~~ ## 使用 Scanner使用步骤: 导包: `import java.util.Scanner; //java里面有个util这个文件夹下面就有这个类` 创建对象实例: ~~~ Scanner sc = new Scanner(System.in); ~~~ 调用方法: ~~~ int i = sc.nextInt();用来接收控制台录入的数字 String s = sc.next();用来接收控制台录入的字符串 ~~~ ~~~ import java.util.Scanner; public class ScannerDemo { public static void main(String[] args) { //创建Scanner引用类型的变量 Scanner sc = new Scanner(System.in); //获取数字 System.out.println("请输入一个数字"); int n = sc.nextInt(); System.out.println("n的值为" + n); //获取字符串 System.out.println("请输入一个字符串"); String str = sc.next(); System.out.println("str的值为" + str); } } ~~~ 注意:如果是字符串5 加上 数字 1 结果是51,因为字符串拼接了 ~~~ Scanner scanner = new Scanner(System.in); System.out.println("请输入内容: "); if (scanner.hasNext()) { System.out.println("输入内容: " + scanner.next()); } scanner.close(); ~~~ ## 分隔符 在Scanner类的构造里面由于接收的类型是InputStream,所以此时依然可以设置一个文件的数据流,但是在读取的时候需要考虑到分隔符 ~~~ public Scanner useDelimiter(String pattern); ~~~ 不设置分隔符的话,他会把空格和换行都当分隔符 ~~~ Scanner scanner = new Scanner(new FileInputStream(new File("/Users/jdxia/Desktop/study/jdxia/src/main/java/log4j.properties"))); //设置读取的分隔符 scanner.useDelimiter("\r\n"); if (scanner.hasNext()) { System.out.println(scanner.next()); } scanner.close(); ~~~ # console Scanner类不适用于从控制台读取密码, java引入console类来解决这个问题 读取用户输入直到换行结束. args参数可以提供输入格式. ~~~ static char readPassword(String prompt, Object... args) static String readLine(String prompt, Object... args) ~~~ ~~~ /** * 如果Java程序要与windows下的cmd或者Linux下的Terminal交互,就可以使用这个Java Console类代劳。Java要与Console进行交互,不总是能得到可用的Java Console类的。一个JVM是否有可用的Console,依赖于底层平台和JVM如何被调用。如果JVM是在交互式命令行(比如Windows的cmd)中启动的,并且输入输出没有重定向到另外的地方,那么就可以得到一个可用的Console实例。 *   但当使用Eclipse等IDE运行以上代码时Console中将会为null。 *   表示Java程序无法获得Console实例,是因为JVM不是在命令行中被调用的,或者输入输出被重定向了。在Eclipse诸如类似的IDE工具中运行Console类。如果没有对Console实例判空操作,结果使用了该实例会抛出java.lang.NullPointerException异常。 */ Console console = System.console(); String user_name = console.readLine("user name: "); char[] chars = console.readPassword("password: "); ~~~