文章目录
6)输入输出
输入Scanner的使用
例:
//创建一个scanner对象
Scanner scanner = new Scanner(System.in);
System.out.println("请输入:");
String s = scanner.next();
System.out.println("您输入的是:" + s);
//关闭输入流,不关闭会一直占用资源
scanner.close();
next()和nextLine()的区别
next() 一定要输入有效字符才能结束,空格为结束标志
nextLine() 以回车作为结束标志
判断是否为指定数据类型
scanner.hasNextXXX 来检查输入的类型
读取了整数后,接着读取字符串
需要注意的是,如果在通过nextInt()读取了整数后,再接着读取字符串,读出来的是回车换行:"\r\n",因为nextInt仅仅读取数字信息,而不会读取回车换行"\r\n".所以,如果在业务上需要读取了整数后,接着读取字符串,那么就应该连续执行两次nextLine(),第一次是取走回车换行,第二次才是读取真正的字符串
格式化输出
格式化
如果不使用格式化输出,就需要进行字符串连接,如果变量比较多,拼接就会显得繁琐
| 转 换 符 | 说 明 | 示 例 |
|---|---|---|
| %s | 字符串类型 | “string” |
| %c | 字符类型 | ‘m’ |
| %b | 布尔类型 | true |
| %d | 整数类型(十进制) | 99 |
| %x | 整数类型(十六进制) | FF |
| %o | 整数类型(八进制) | 77 |
| %f | 浮点类型 | 99.99 |
| %a | 十六进制浮点类型 | FF.35AE |
| %e | 指数类型 | 9.38e+5 |
| %g | 通用浮点类型(f和e类型中较短的) | |
| %h | 散列码 | |
| %% | 百分比类型 | % |
| %n | 换行符 | |
| %tx | 日期与时间类型(x代表不同的日期与时间转换符) |
public class Exercise {
public static void main(String[] args) {
String name = "老张";
String gender = "男";
int age = 39;
int height = 170;
String info = "本人%s,%s,%d岁,身高%d";
System.out.printf(info, name, gender, age, height);
System.out.format(info, name, gender, age, height);
}
}
printf和format能够达到一模一样的效果,在printf中直接调用了format
//不同国家的千位分隔符
System.out.format(Locale.FRANCE,"%,.2f%n",Math.PI*10000);
System.out.format(Locale.US,"%,.2f%n",Math.PI*10000);
System.out.format(Locale.UK,"%,.2f%n",Math.PI*10000);
搭配转换符的标志,如图所示
| 标志 | 说 明 | 示 例 | 结 果 |
|---|---|---|---|
| + | 为正数或者负数添加符号 | ("%+d",15) | +15 |
| − | 左对齐 | ("%-5d",15) | |15 | |
| 0 | 数字前面补0 | ("%04d", 99) | 0099 |
| 空格 | 在整数之前添加指定数量的空格 | ("% 4d", 99) | | 99| |
| , | 以“,”对数字分组 | ("%,f", 9999.99) | 9,999.990000 |
| ( | 使用括号包含负数(正数没用) | ("%(f", -99.99) | (99.990000) |
| # | 如果是浮点数则包含小数点,如果是16进制或8进制则添加0x或0 | ("%#x", 99)("%#o", 99) | 0x630143 |
| < | 格式化前一个转换符所描述的参数 | ("%f和%❤️.2f", 99.45) | 99.450000和99.45 |
| $ | 被格式化的参数索引 | ("%1 d , d,%2 d,s", 99,“abc”) | 99,abc |
常见日期和时间组合的格式,如图所示。
| 转 换 符 | 说 明 | 示 例 |
|---|---|---|
| c | 包括全部日期和时间信息 | 星期六 十月 27 14:21:20 CST 2007 |
| F | “年-月-日”格式 | 2007-10-27 |
| D | “月/日/年”格式 | 10/27/07 |
| r | “HH:MM:SS PM”格式(12时制) | 02:25:51 下午 |
| T | “HH:MM:SS”格式(24时制) | 14:28:16 |
| R | “HH:MM”格式(24时制) | 14:28 |
日期格式转换符
| 转 换 符 | 说 明 | 示 例 |
|---|---|---|
| b | 月份简称 | Sep |
| B | 月份全称 | September |
| a | 星期简称 | Mon |
| A | 星期全称 | Monday |
| C | 年的前两位数字(不足两位前面补0) | 20 |
| y | 年的后两位数字(不足两位前面补0) | 22 |
| j | 一年中的天数(即年的第几天) | 076 |
| m | 两位数字的月份(不足两位前面补0) | 03 |
| d | 两位数字的日(不足两位前面补0) | 17 |
| e | 月份的日(前面不补0) | 17 |
时间格式的转换符
| 转 换 符 | 说 明 | 示 例 |
|---|---|---|
| H | 2位数字24时制的小时(不足2位前面补0) | 15 |
| I | 2位数字12时制的小时(不足2位前面补0) | 03 |
| k | 2位数字24时制的小时(前面不补0) | 15 |
| l | 2位数字12时制的小时(前面不补0) | 3 |
| M | 2位数字的分钟(不足2位前面补0) | 03 |
| S | 2位数字的秒(不足2位前面补0) | 09 |
| L | 3位数字的毫秒(不足3位前面补0) | 015 |
| N | 9位数字的毫秒数(不足9位前面补0) | 562000000 |
| p | 小写字母的上午或下午标记 | 中:下午英:pm |
| z | 相对于GMT的RFC822时区的偏移量 | +0800 |
| Z | 时区缩写字符串 | CST |
| s | 1970-1-1 00:00:00 到现在所经过的秒数 | 1193468128 |
| Q | 1970-1-1 00:00:00 到现在所经过的毫秒数 | 1193468128984 |
换行符
换行符就是另起一行 — ‘\n’ 换行(newline),回车符就是回到一行的开头 — ‘\r’ 回车(return)
在idea里敲一个回车,实际上是回车换行符
然而在不同的操作系统,换行符是不一样的
(1)在DOS和Windows中,每行结尾是 “\r\n”;
(2)Linux系统里,每行结尾只有 “\n”;
(3)Mac系统里,每行结尾是只有 “\r”。
为了使得同一个java程序的换行符在所有的操作系统中都有一样的表现,使用%n,就可以做到平台无关的换行 System.out.printf("%n");,注意一定要是printf而不是print










