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 |
− | 左对齐(占用5个空间) | (“%-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和%< 3.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