读取输入:
如果想通过控制台进行输入, 首先需要构造一个Scanner对象.并与'标准输入流'System.in关联.
代码见下文代码块.
- Sanner (InputStream in)
用给定的输入流创建一个Scanner对象
- String nextLine()
读取输入的下一行内容
- String next()
读取输入的下一个单词(以空格作为分隔符)
- int nextInt()
- double nextDouble()
读取并转换下一个表示整数或浮点的字符序列
- boolean hasNext()
检测输入中是否还有其他单词
- boolean hasNextInt()
- boolean hasNextDouble()
检测是否还有表示整数或浮点数的下一个字符序列.
Scanner类输入时可见的, 不适合从控制台读取密码.可使用Console类.
注意: 只能通过命令行执行, IDE中会报空指针异常.
Console对象每次只能读取一行, 不方便.
String char[] readPassword(String prompt, Object...args)
String String readLine(String prompt, Object...args)
显示字符串prompt并且读取用户输入, 直到输入行结束.
args参数可以用来提供输入格式.
- Console:
Console cons = System.console();
String username = cons.readLine("User name: ");
char[] passwd = cons.readPassword("Password: ");
为了安全起见, 返回的密码放到一维字符数组中, 而不是字符串中.在对密码进行处理后, 应该马上用一个填充值覆盖数组元素.
格式化输出:
double x = 10000.0 / 3.0;
System.out.print(x); // 3333.3333333333335
System.out.printf("%8.2f", x); //3333.33
用8个字符的宽度和小数点后两个字符的精度打印x, 即打印输出一个空格和7个字符.
System.out.printf("Hello, %s. Next year, you'll be %d", name, age);
每一个以%字符开始的格式说明符都用相应的参数替换.格式说明符尾部的转换符将指示被格式化的数值类型:
用于prinf的转换符
转换符 类型 举例
d 十进制整数 159 (常用)
x 十六进制整数 9f
o 八进制整数 237
f 定点浮点数 15.9 (常用)
e 指数浮点数 1.59e+01
g 通用浮点数 -
a 十六进制浮点数 0x1.fccdp3
s 字符串 Hello (常用)
c 字符 H
b 布尔 True
h 散列码 42628b2
tx 日期时间 见下表
% 百分号 %
n 与平台有关的行分隔符
package com.picc.sample.firstsample; import java.util.Scanner; public class PrintSample { public static void main(String[] args) { Scanner in = new Scanner(System.in); // get first input System.out.println("What your name?"); String name = in.nextLine(); // 取输入行的内容, Han Mei Mei ---> Han Mei Mei // String name = in.next(); // 取输入行中第一个空格前面的内容, Han Mei Mei ---> Han // get second input System.out.println("How old are you?"); int age = in.nextInt(); // 取整数, 20 ---> 20 // Double age = in.nextDouble(); // 取浮点数, 20 ---> 20.0 System.out.println("Hello, " + name +". Next year, you'll be " + (age + 1)); } }
// PrintSample .java package com.picc.sample.firstsample; import java.io.Console; public class PrintSample { public static void main(String[] args) { Console cons = System.console(); String username = cons.readLine("User name: "); char[] passwd = cons.readPassword("Password: "); String password = String.valueOf(passwd); System.out.println("Hello, " + username +", you password is: " + password); } } // Console直接运行会报错: Exception in thread "main" java.lang.NullPointerException at com.picc.sample.firstsample.PrintSample.main(PrintSample.java:90)