前面已经看到,打印输出到“标准输出流”(即控制台窗口)是一件废话从那个容易的事情,只要调用System.out.println即可。然而,读取“标准输入”System.in就没那么简单了。要想通过控制台进行输入,首先需要构造一个Scanner对象,并与“标准输入流”System.in关联。
Scanner in= new Scanner(System.in);
现在,就可以使用Scanner类的各种方法实现输入操作了。例如,nextLine方法将输入一行。
import java.util.Scanner;
System.out.println("What's your name ?");
Scanner in = new Scanner(System.in);
String s = in.nextLine();
System.out.println(s);
在这里,使用nextLine方法是因为在输入行中有可能包含空格。想要读取一个单词(以空白符作为分隔符),就调用
String firstName = in.next() ;
要想读取一个证书,就用nextInt方法。
int age = in.nextInt();
于此类似,要想读取下一个浮点数,就调用nextDouble方法。
在程序清单3-2的程序中,询问用户姓名和年龄,然后打印一条如下格式的消息:
Hello, Cay Next year, you'll be 57
System.out.println("What's your name ?");
Scanner in = new Scanner(System.in);
String name = in.nextLine();
int age = in.nextInt();
System.out.println("Hello"+", "+name+", "+"Next year"+", you'll be "+(age+1));
//What's your name ?
//Mark
//28
//Hello, Mark, Next year, you'll be 29
最后,需要注意的是 Scanner类定义在java.util包中。当使用的类不是定义在基本java.lang包中时,一定要使用import指示符将相应的包加载进来。有关包与import指示字的详细描述在下章。
因为输入时可见的,所以Scanner类不适用于从控制台读取密码。Java SE 6特别引入了Console类实现这个目的。要想读取一个密码,可以采用下列代码:
Console cons = System.console();
String username = cons.readLine("User name: ");
char[] passwd = cons.readPassword("Password: ");
Console cons = System.console();
String username = cons.readLine("User name: ");
char[] passwd = cons.readPassword();
System.out.println("Username:" + username + " Password:" + passwd);
java.util.Arrays.fill(passwd, ' ');
System.out.println(cons);
System.console() returns null if there is no console.
java.util.Scanner 5.0
方法名 | 返回类型 | 说明 |
Scanner(InputStream in) | 用给定的输入流创建一个Scanner对象 | |
nextLine() | String | 读取输入的下一行内容 |
next() | String | 读取输入的下一个单词(以空格作为分隔符) |
nextInt() | int | 读取一个整型数字 |
nextDouble() | double | 读取并转换下一个表示整数或浮点数的字符序列 |
hasNext() | boolean | 检测输入中是否还有其他单词 |
hasNextInt() | boolean | 检测输入中是否还有其他整数 |
hasNextDouble() | boolean | 检测输入中是否还有其他浮点数 |
java.lang.System
static Console console()
如果有可能进行交互操作,就通过控制台窗口为交互的用户返回一个Console对象,否则返回null。对于任何一个通过控制台窗口启动的程序,都可使用Console对象。否则,其可用性将与所使用的系统有关。
java.io.Console
static char[] readPasswrod(String prompt,object...args)
static String readLine(String prompt, object...args)
显示字符串prompt并且读取用户输入,直到输入结束。args参数可以用来提供输入格式。