下面学习控制台的输入输出部分。
1 读入输入
注意:使用Scanner类之前得先导入这个类哈,
import java.util.Scanner;
1 先用System.in构造一个Scanner类对象。
Scanner in = new Scanner(System.in);
2 然后你就可以提示用户输入,就可以读取到了,
System.out.println("你叫什么名字?");
String name = in.nextLine();//读取一行,用户用回车确认了嘛
3 也可以读取一个单词
System.out.println("你姓什么?");
String firstName = in.next();//检测到空格了,就算输入一个单词了,本段代码不能多输入啊,会报异常的
4 也可以读取一个整型
System.out.println("你几岁啦?");
int age = in.nextInt();
5 也可以读取浮点型
System.out.println("你有多少钱?");
double money = in.nextDouble();
6 然后你就可以显示你得到的数据了
System.out.println("你好," + name + ",你姓" + firstName + ",对不对?");
System.out.println("我知道你" + age + "岁了,还知道你有" + money + "元钱。");
注意:Scanner不适合输入密码,Java有Console类比较适合输入密码。
//注意,这段代码不能在IDE里运行成功,得自己编写用系统自带的命令行才能执行
Console cons = System.console();
String username = cons.readLine("用户名:");
char[] passwd = cons.readPassword("密码:");
System.out.println("你的用户名是:" + username
+ ",你输入的密码是:"+ Arrays.toString(passwd));
Scanner类的一些没提到的方法
- boolean hasNext()
检测是否有下一个单词输入 - boolean hasNextInt()
检测是否有下一个整型输入 - boolean hasNextDouble()
检测是否有下一个浮点型输入
2 格式化输出
有一些特殊的场合,我们不满足于只是输出结果,我们想要以一定的格式来输出,那就要用到格式化输出。
格式化输出采用printf()方法。
double x= 10000.0 / 3.0;
System.out.println(x); //3333.3333333333335
System.out.printf("%8.2f", x); // 3333.33
//上面这个输出就是格式化后的结果,显示8位,小数点后保留两位
另一个例子:
String name = "AA";
int age = 5;
System.out.printf("Hello, %s, Next year, you'll be %d", name, age + 1);
每个格式化参数都以%开始,后面接不同的转换符,比如:f代表浮点数,s代表字符串,d代表整数。
具体请看下表:
| 转换符 | 类型 | 举例 |
|---|---|---|
| d | 10进制整型数字 | 159 |
| x | 16进制整型数字 | 9f |
| o | 8进制整型数字 | 237 |
| f | 定浮点数 | 15.9 |
| e | 指数浮点数 | 1.59e+01 |
| g | 通用浮点数 | - |
| a | 16进制浮点数 | 0x1.fxxdp3 |
| s | 字符串 | Hello |
| c | 字符 | H |
| b | 布尔型 | true |
| h | 散列码 | 42628b2 |
| tx或Tx | 日期和时间 | 以后会提到 |
| % | 百分号 | % |
| n | 与平台有关的行分隔符 | —— |
此外,还可以用一些标识符来控制输出的形式。
| 标识符 | 目的 | 举例 |
|---|---|---|
| + | 显示数字的正负号 | +3333.33 |
| 空格 | 正数前加空格 | ’ 3333.33’ |
| 0 | 数字前面补0 | 003333.33 |
| - | 左对齐 | ‘3333.33 ‘ |
| ( | 把负数用小括号括起来 | (3333.33) |
| , | 添加分组分隔符 | 3,333.33 |
| (f) | 总是有小数点 | 3333. |
| (x或o) | 添加0x或0前缀 | 0xcafe |
| $ | 给定被格式化参数索引,%1$d 把第1个参数进行格式化 | 159 |
| < | 格式化前面说明的数字,%d% | 159 9F |
时间的格式化输出
System.out.printf("%tc", new Date());//星期六 十一月 19 18:31:20 CST 2016
System.out.printf("%1$s %2$tB %2$te, %2$tY", "日期:", new Date());//日期: 十一月 19, 2016
下表显示了一些关于时间的格式化输出:
| 转换符 | 类型 | 举例 |
|---|---|---|
| c | 完整日期和时间 | 星期六 十一月 19 18:31:20 CST 2016 |
| F | ISO 8601日期 | 2016-11-19 |
| D | 美国格式日期 | 11/19/16 |
| T | 24小时时间 | 18:37:37 |
| r | 12小时时间 | 06:37:37 pm |
| R | 24小时时间,没有秒 | 18:37 |
| Y | 4位数年份,前面会补0 | 2015 |
| y | 后2位年份,会补0 | 15 |
| C | 前2位年份,会补0 | 20 |
| B | 月份全称 | 十一月 |
| b 或者 h | 简化月份 | 十一月(英文的会简化) |
| m | 2位数月份,会补0 | 02 |
| d | 2位数日期,会补0 | 09 |
| e | 2位数日期,不补0 | 9 |
| A | 完整星期名 | 星期一 |
| a | 简化星期名 | 星期一(英文的会简化) |
| j | 一年中的第几天,001到366 | 069 |
| H | 2位数小时,会补0,24小时制 | 18 |
| k | 2位数小时,不补0,24小时制 | 18 |
| I | 2位数小时,会补0,12小时值 | 06 |
| l | 2位数小时,不补0,12小时值 | 06 |
| M | 2位数分钟,补0 | 05 |
| S | 2位数秒,补0 | 19 |
| L | 3位数毫秒,补0 | 047 |
| N | 9位数纳秒,补0 | 047000000 |
| p | 上午或下午的标记 | pm |
| z | 从GMT起,RFC822数字位移 | -0800 |
| Z | 时区 | PST |
| s | 从格林威治时间1970-01-01 00:00:00起的秒数 | 1479553528 |
| Q | 从格林威治时间1970-01-01 00:00:00起的毫秒数 | 1479553546222 |
3 文件的输入和输出
可以用Scenner类进行文件读入:
Scanner in = new Scanner(Path.get("fileName.txt"), "UTF-8");
使用PrintWriter类进行写入:
//如果文件不存在,就会创建
//你可以使用print()、println()、printf()进行写入
PrintWriter out = new PrintWriter("fileName.txt", "UTF-8");
File文件的读出写入容易引发异常,后面会有专门一章节说异常的问题。
1万+

被折叠的 条评论
为什么被折叠?



