内容来源AI
java System.out.printf输出语句都有哪些格式控制符
Java 中 System.out.printf 沿用了 C 语言 printf 的格式控制符语法,通过 % 开头的格式说明符控制输出格式。以下是常用的格式控制符分类及说明:
一、基础类型格式符
| 格式符 | 说明 | 适用类型 | 示例 |
|---|---|---|---|
%d | 十进制整数(整数) | byte/short/int/long | printf("%d", 123) → 123 |
%o | 八进制整数 | 同上 | printf("%o", 8) → 10 |
%x/%X | 十六进制整数(小写/大写) | 同上 | printf("%x", 16) → 10;%X → 10 |
%f | 浮点数(小数) | float/double | printf("%f", 3.14) → 3.140000 |
%e/%E | 科学计数法(小写/大写) | float/double | printf("%e", 123.4) → 1.234000e+02 |
%g/%G | 自动选择%f或%e(更简洁) | float/double | printf("%g", 0.000123) → 1.23e-04 |
%c | 单个字符 | char | printf("%c", 'A') → A |
%s | 字符串 | String/任意对象(调用toString()) | printf("%s", "abc") → abc |
%b/%B | 布尔值(true/false/大写) | boolean/任意对象(非null→true) | printf("%b", null) → false |
%n | 平台无关的换行符 | - | printf("a%nb") → 换行输出a和b |
二、进阶格式控制(修饰符)
可在格式符中添加修饰符,控制输出宽度、精度、对齐方式等:
1. 宽度与对齐
%Nd:输出宽度为N,右对齐(不足补空格);
示例:printf("%5d", 123)→123(占5位,右对齐)。%-Nd:输出宽度为N,左对齐;
示例:printf("%-5d", 123)→123(占5位,左对齐)。
2. 精度(小数/字符串)
%.Nf:浮点数保留N位小数(四舍五入);
示例:printf("%.2f", 3.1415)→3.14。%.Ns:字符串最多输出N个字符;
示例:printf("%.3s", "abcdef")→abc。
3. 补零填充
%0Nd:宽度为N,不足补零(而非空格);
示例:printf("%05d", 123)→00123。
4. 千位分隔符(Java 1.5+)
%,d:整数添加千位分隔符;
示例:printf("%,d", 1234567)→1,234,567。
5. 正负号显示
%+d:强制显示正负号;
示例:printf("%+d", 123)→+123;printf("%+d", -123)→-123。
三、特殊类型格式符
| 格式符 | 说明 | 适用类型 | 示例 |
|---|---|---|---|
%h/%H | 对象的哈希码(十六进制) | 任意对象 | printf("%h", "abc") → 90015 |
%t/%T | 日期时间格式(搭配后缀) | Date/Calendar/Long | 见下方日期时间子符 |
四、日期时间格式符(%t/%T 后缀)
%t 后需加后缀指定日期时间部分,%T 表示大写:
| 后缀 | 说明 | 示例(long time = System.currentTimeMillis()) |
|---|---|---|
Y | 4位年份 | printf("%tY", time) → 2025 |
m | 2位月份(01-12) | printf("%tm", time) → 11 |
d | 2位日期(01-31) | printf("%td", time) → 27 |
H | 24小时制小时(00-23) | printf("%tH", time) → 14 |
M | 分钟(00-59) | printf("%tM", time) → 30 |
S | 秒(00-59) | printf("%tS", time) → 45 |
F | 日期(yyyy-MM-dd) | printf("%tF", time) → 2025-11-27 |
T | 时间(HH:mm:ss) | printf("%tT", time) → 14:30:45 |
c | 完整日期时间(Locale默认) | printf("%tc", time) → Thu Nov 27 14:30:45 CST 2025 |
五、示例汇总
public class PrintfDemo {
public static void main(String[] args) {
// 基础类型
System.out.printf("整数:%d,八进制:%o,十六进制:%x%n", 123, 123, 123);
// 输出:整数:123,八进制:173,十六进制:7b
// 浮点数
System.out.printf("浮点数:%.2f,科学计数法:%e%n", 3.1415, 123.4);
// 输出:浮点数:3.14,科学计数法:1.234000e+02
// 宽度与对齐
System.out.printf("右对齐:%5d,左对齐:%-5d,补零:%05d%n", 123, 123, 123);
// 输出:右对齐: 123,左对齐:123 ,补零:00123
// 日期时间
long now = System.currentTimeMillis();
System.out.printf("日期:%tF,时间:%tT%n", now, now);
// 输出:日期:2025-11-27,时间:14:35:20
}
}
总结
- 核心格式符覆盖基础类型、字符串、日期时间,支持宽度、精度、对齐等修饰;
%t系列专门处理日期时间,搭配后缀可灵活输出不同时间部分;- 格式符语法与 C 语言兼容,易上手且功能强大,适合需要精细化控制输出格式的场景。
Java练习题
1.用*将字符串中数字标记出来
void digit(){
String str="12abc234j2k8psuuy9";
boolean bStart=false;
StringBuilder sb = new StringBuilder();
for(int i =0;i<str.length();i++){
char c = str.charAt(i);
if(c>='0'&&c<='9'){
if(!bStart){
bStart=true;
sb.append("*");
}
sb.append(c);
}else{
if(bStart){
sb.append("*");
bStart=false;
}
sb.append(c);
}
if(bStart&&i==str.length()-1){
sb.append("*");
bStart=false;
}
}
System.out.println(sb.toString());
}
2.超长整型数字求和
void plus(){
String a="99999999999999999999999999999999";
String b="12395";
int length = a.length()>=b.length() ? a.length()+1 : b.length()+1;
char[] arrA = new char[length];
char[] arrB = new char[length];
int k=0;
for(int j=0;j<arrA.length;j++){
if(j<arrA.length-a.length()){
arrA[j]='0';
} else {
arrA[j]=a.charAt(k);
k++;
}
}
System.out.println(arrA);
k=0;
for(int j=0;j<arrB.length;j++){
if(j<arrB.length-b.length()){
arrB[j]='0';
} else {
arrB[j]=b.charAt(k);
k++;
}
}
System.out.println(arrB);
char[] arrC = new char[length];
boolean jw = false;
for(int i=arrA.length-1;i>=0;i--){
int sum = (arrA[i]-'0') + (arrB[i]-'0');
if(jw){
sum+=1;
jw=false;
}
if(sum>=10){
arrC[i]=(char)(sum%10 +'0');
jw=true;
} else {
arrC[i]=(char)(sum+'0');
jw=false;
}
}
//System.out.println(arrC);
if(arrC[0]=='0'){
for(int i=1;i<arrC.length;i++){
System.out.print(arrC[i]);
}
} else {
for(int i=0;i<arrC.length;i++){
System.out.print(arrC[i]);
}
//System.out.println(Integer.parseInt(String.valueOf(arrC)));
}
}

2951

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



