Java基础2

内容来源AI

java System.out.printf输出语句都有哪些格式控制符

Java 中 System.out.printf 沿用了 C 语言 printf 的格式控制符语法,通过 % 开头的格式说明符控制输出格式。以下是常用的格式控制符分类及说明:

一、基础类型格式符

格式符说明适用类型示例
%d十进制整数(整数)byte/short/int/longprintf("%d", 123)123
%o八进制整数同上printf("%o", 8)10
%x/%X十六进制整数(小写/大写)同上printf("%x", 16)10%X10
%f浮点数(小数)float/doubleprintf("%f", 3.14)3.140000
%e/%E科学计数法(小写/大写)float/doubleprintf("%e", 123.4)1.234000e+02
%g/%G自动选择%f%e(更简洁)float/doubleprintf("%g", 0.000123)1.23e-04
%c单个字符charprintf("%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") → 换行输出ab

二、进阶格式控制(修饰符)

可在格式符中添加修饰符,控制输出宽度、精度、对齐方式等:

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)+123printf("%+d", -123)-123

三、特殊类型格式符

格式符说明适用类型示例
%h/%H对象的哈希码(十六进制)任意对象printf("%h", "abc")90015
%t/%T日期时间格式(搭配后缀)Date/Calendar/Long见下方日期时间子符

四、日期时间格式符(%t/%T 后缀)

%t 后需加后缀指定日期时间部分,%T 表示大写:

后缀说明示例(long time = System.currentTimeMillis()
Y4位年份printf("%tY", time)2025
m2位月份(01-12)printf("%tm", time)11
d2位日期(01-31)printf("%td", time)27
H24小时制小时(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)));	
	}
	
	
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值