关于java:Java-中字符串的格式化-Format

引言

字符串的格式化相当于将字符串依照指定的格局进行toString(),个别有两种模式:

//应用指定的格局字符串和参数返回一个格式化字符串。
 public static String format(String format, Object... args) {
        return new Formatter().format(format, args).toString();
    }
//应用指定的语言环境、格局字符串和参数返回一个格式化字符串。
public static String format(Locale l, String format, Object... args) {
        return new Formatter(l).format(format, args).toString();
    }

数据转化符

数据类型 阐明 转化模式
%s 字符串类型 “string”
%c 字符类型 ‘A’
%b 布尔类型 true/false
%o 整数类型(八进制) 111
%d 整数类型(十进制) 17
%x 整数类型(十六进制) 11
%f 浮点类型(根本) 66.66
%e 指数类型 1.11e+5
%a 浮点类型(十六进制) FF.22
%h 散列码 11
%% 百分比类型 17%
%n 换行符
%tx 日期与工夫类型
测试
public class Format01 {
    public static void main(String[] args) {
        System.out.println(String.format("字符串:%s", "String"));
        System.out.println(String.format("字符:%c", 'M'));
        System.out.println(String.format("布尔类型:%b", 'M'>'A'));
        System.out.println(String.format("八进制整数类型:%o", 17));
        System.out.println(String.format("十进制整数类型:%d", 17));
        System.out.println(String.format("十六进制整数类型:%x", 17));
        System.out.println(String.format("根本浮点类型:%f", 99.1));
        System.out.println(String.format("指数类型:%e", 100.111111111));
        System.out.println(String.format("十六进制浮点类型:%a", 17.111111));
        System.out.println(String.format("散列码:%h", 17));
        System.out.println(String.format("百分比类型:17%%"));
        System.out.print(String.format("换行符:%n", 17));    
    }

}
输入
字符串:String
字符:M
布尔类型:true
八进制整数类型:21
十进制整数类型:17
十六进制整数类型:11
根本浮点类型:99.100000
指数类型:1.001111e+02
十六进制浮点类型:0x1.11c71c53f39d2p4
散列码:11
百分比类型:17%
换行符:

字符串的格式化

标记 阐明 示例 输入
+ 为负数增加符号 (“负数:%+f”,11.11)) 负数:+11.110000
左对齐 (“左对齐:%-5d”,11) 左对齐:11
0 整数后面补0 (“数字后面补0:%04d”,11) 数字后面补0:0011
, 对数字分组 (“按,对数字分组:%,d”,111111111) 按,对数字分组:111,111,111
空格 数字后面补空格 (“空格:% 4d”,11) 空格: 11
蕴含正数 (“应用括号蕴含正数:%(f”,-11.11) 应用括号蕴含正数:(11.110000)
# 浮点数蕴含小数,八进制蕴含0,十六进制蕴含0x
< 格式化前一个转换符形容的参数 (“格式化前形容的参数:%f转化后%<3.3f”,111.1111111) 格式化前形容的参数:111.111111转化后111.111
$ 被格式化的参数索引 (“被格式化的参数索引:%1$d,%2$s”,11,”111.1111111″) 被格式化的参数索引:11,111.1111111
测试
public class formatString {
    public static void main(String[] args) {
        System.out.println(String.format("负数:%+f",11.11));
        System.out.println(String.format("右对齐:%+10d",11));
        System.out.println(String.format("左对齐:%-5d",11));
        System.out.println(String.format("数字后面补0:%044d",11));
        System.out.println(String.format("空格:% 4d",11));
        System.out.println(String.format("按,对数字分组:%,d",111111111));
        System.out.println(String.format("应用括号蕴含正数:%(f",-11.11));
        System.out.println(String.format("浮点数蕴含小数点:%#f",11.1));
        System.out.println(String.format("八进制蕴含0:%#o",11));
        System.out.println(String.format("十六进制蕴含0x:%#x",11));
        System.out.println(String.format("格式化前形容的参数:%f转化后%<3.3f",111.1111111));
        System.out.println(String.format("被格式化的参数索引:%1$d,%2$s",11,"111.1111111"));
        
    }

}
输入
负数:+11.110000
右对齐:       +11
左对齐:11   
数字后面补0:00000000000000000000000000000000000000000011
空格:  11
按,对数字分组:111,111,111
应用括号蕴含正数:(11.110000)
浮点数蕴含小数点:11.100000
八进制蕴含0:013
十六进制蕴含0x:0xb
格式化前形容的参数:111.111111转化后111.111
被格式化的参数索引:11,111.1111111

日期的格式化

转换符 阐明 示例
c 全副工夫日期 星期四 十二月 17 13:11:35 CST 2020
F 年-月-日格局 2020-12-17
D 月/日/年格局 12/17/20
r HH:MM:SS PM格局(12时制) 01:11:35 下午
T HH:MM:SS格局(24时制) 13:11:35
R HH:MM格局(24时制) 13:11
测试
public class formatDate {
    public static void main(String[] args) {
        Date date = new Date();
        System.out.println(String.format("全副工夫日期:%tc",date));
        System.out.println(String.format("年-月-日格局:%tF",date));
        System.out.println(String.format("月/日/年格局:%tD",date));
        System.out.println(String.format("HH:MM:SS PM格局(12时制):%tr",date));
        System.out.println(String.format("HH:MM:SS格局(24时制):%tT",date));
        System.out.println(String.format("HH:MM格局(24时制):%tR",date));
    }
}
输入
全副工夫日期:星期四 十二月 17 13:21:35 CST 2020
年-月-日格局:2020-12-17
月/日/年格局:12/17/20
HH:MM:SS PM格局(12时制):01:21:35 下午
HH:MM:SS格局(24时制):13:21:35
HH:MM格局(24时制):13:21

工夫的格式化

转换符 阐明 示例
H 2位数字24时制的小时(有余2位后面补0) 13
l 2位数字12时制的小时 1
k 2位数字24时制的小时 13
M 2位数字的分钟 33
L 3位数字的毫秒 745
S 2位数字的秒 33
N 9位数字的毫秒数 745000000
p Locale.US,\”小写字母的上午或下午标记(英) 下午
Z 时区缩写字符串 CST
z 绝对于GMT的RFC822时区的偏移量 +0800
s 1970-1-1 00:00:00 到当初所通过的秒数 1608183213
Q 1970-1-1 00:00:00 到当初所通过的毫秒数 1608183213745
测试

public class formatTime {
    public static void main(String[] args) {
        Date date = new Date();
        System.out.println(String.format("2位数字24时制的小时(有余2位后面补0):%tH", date));
        System.out.println(String.format("2位数字12时制的小时:%tl", date));
        System.out.println(String.format("2位数字24时制的小时:%tk", date));
        System.out.println(String.format("2位数字的分钟:%tM", date));
        System.out.println(String.format("3位数字的毫秒:%tL", date));
        System.out.println(String.format("2位数字的秒:%tS", date));
        System.out.println(String.format("9位数字的毫秒数:%tN", date));
        System.out.println(String.format("时区缩写字符串:%tZ", date));
        System.out.println(String.format("绝对于GMT的RFC822时区的偏移量:%tz", date));
        System.out.println(String.format("Locale.US,\"小写字母的上午或下午标记(英):%tp", date));
        System.out.println(String.format("1970-1-1 00:00:00 到当初所通过的秒数:%ts", date));
        System.out.println(String.format("1970-1-1 00:00:00 到当初所通过的毫秒数:%tQ", date));

    }

}
输入
2位数字24时制的小时(有余2位后面补0):13
2位数字12时制的小时:1
2位数字24时制的小时:13
2位数字的分钟:33
3位数字的毫秒:745
2位数字的秒:33
9位数字的毫秒数:745000000
时区缩写字符串:CST
绝对于GMT的RFC822时区的偏移量:+0800
Locale.US,"小写字母的上午或下午标记(英):下午
1970-1-1 00:00:00 到当初所通过的秒数:1608183213
1970-1-1 00:00:00 到当初所通过的毫秒数:1608183213745

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

这个站点使用 Akismet 来减少垃圾评论。了解你的评论数据如何被处理