java在控制台的格式化输出

本文详细介绍了Java中使用System.out.printf进行格式化输出的方法,包括基本格式化标识符的使用,如布尔值、十进制、字符、字符串、浮点数等的格式化输出,以及如何格式化输出整数、浮点数和日期时间等内容。
package com.liming.review;
import java.util.Date;

public class Printf {
	/**
	 * 演示java中在控制台的格式化输出
	 * @author LiMing
	 * @since 2012/01/24
	 * */
	public static void main(String[] args) {

		/**
		 * 常用标识符
		 * %b 布尔值                 
		 * %d 十进制
		 * %c 字符
		 * %s 字符串
		 * %f 浮点数
		 * %e 标准科学计数法 
		 * */
		
		System.out.printf("%s","LiMing");

		/**
		 *%n 表示换行  亦可以使用System.out.println()
		 *%S 将字符串以大写形式输出
		 *支持多参数输出
		 *多参数输出时例如
		 *System.out.printf(format,item1,item2,item3...); format 是指一个字串以及格式标识符构成的字符串
		 *条目必须与format中指定的格式标识符对应
		 **/
		System.out.printf("%n%s%n", "end line");
		System.out.printf("%s = %s%n", "Name", "Zhangsan");
		System.out.printf("%S = %s%n", "Name", "Zhangsan");
		
		// 支持多个参数时,可以在%s之间插入变量编号,1$表示第一个字符串,3$表示第3个字符串
		System.out.printf("%1$s = %3$s %2$s%n", "Name", "san", "Zhang");
		System.out.printf("true = %b; false = ", true);
		System.out.printf("%b%n", false);

		/**@整数的格式化输出
		 * %d表示将整数格式化为10进制整数
		 * %o表示将整数格式化为8进制整数
		 * %x表示将整数格式化为16进制整数
		 * %X表示将整数格式化为16进制整数,并且字母变成大写形式
		 * */
		Integer iObj=100;
		System.out.printf("%d;%d;%d%n", -100, 1234L, iObj);
		System.out.printf("%o; %o; %o%n", -100, 1234L, iObj); 
		System.out.printf("%x; %x; %x%n", -100, 1234L, iObj);
		System.out.printf("%X; %X; %X%n", -100, 1234L, iObj);

		/**@浮点数格式化输出
		 * %e表示以科学技术法输出浮点数
		 * %E表示以科学技术法输出浮点数,并且为大写形式
		 * %f表示以十进制格式化输出浮点数,还可以限制小数点后的位数
		 * %10.2f 其中10代表域宽度,即输出字符所占的宽度;2表示精度,即小数点之后的位数;f表示格式描述符
		 * */

		Double dObj = 12.34;
		System.out.printf("%e; %e; %e%n", -123.456f, 7464.232641d, dObj);
		System.out.printf("%E; %E; %E%n", -123.456f, 7464.232641d, dObj);
		System.out.printf("%f; %f; %f%n", -123.456f, 7464.232641d, dObj);
		System.out.printf("%.1f; %.3f; %f%n", -123.456f, 7464.232641d, dObj);
		System.out.printf("%10.2f;%5.3f%n%n", 123.4,123.4);

		
		/**
		 * @时间的格式化输出
		 * %t 表示格式化日期时间类型,%T是时间日期的大写形式,在%t之后用特定的字母表示不同的输出格式 
		 * %t之后用y表示输出日期的年份(2位数的年,如99)
	         * %t之后用m表示输出日期的月份,
	         * %t之后用d表示输出日期的日号
	         * %t之后用Y表示输出日期的年份(4位数的年),
		 * %t之后用B表示输出日期的月份的完整名, %t之后用b表示输出日期的月份的简称
		 * %t之后用D表示以 "%tm/%td/%ty"格式化日期
		 * %t之后用F表示以"%tY-%tm-%td"格式化日期
		 * %t之后用H表示输出时间的时(24进制),%t之后用I表示输出时间的时(12进制)
		 * %t之后用M表示输出时间的分,%t之后用S表示输出时间的秒
		 * %t之后用L表示输出时间的秒中的毫秒
		 * %t之后p表示输出时间的上午或下午信息
		 * %t之后用R表示以"%tH:%tM"格式化时间
		 * %t之后用T表示以"%tH:%tM:%tS"格式化时间
		 * %t之后用r表示以"%tI:%tM:%tS %Tp"格式化时间
		 * %t之后用A表示得到星期几的全称
		 * %t之后用a表示得到星期几的简称
	         * */
		Date date = new Date();
		long dataL = date.getTime();
		System.out.printf("%1$ty-%1$tm-%1$td%n", date);
		System.out.printf("%1$td-%1$tm-%1$ty%n", date);
		System.out.printf("%1$td-%1$tm-%1$ty%n", date);
		System.out.printf("%1$tY-%1$tB-%1$td%n", date);
		
		System.out.printf("%1$tD%n", date);
		System.out.printf("%1$tF%n", date);
		System.out.printf("%1$tH:%1$tM:%1$tS; %2$tI:%2$tM:%2$tS%n", date, dataL);
		System.out.printf("%1$tH:%1$tM:%1$tS %1$tL%n", date);
		System.out.printf("%1$tH:%1$tM:%1$tS %1$tL %1$tp%n", date);
		System.out.printf("%1$tR%n", date);
		System.out.printf("%1$tT%n", date);
		System.out.printf("%1$tr%n", date);
		System.out.printf("%1$tF %1$tA%n", date);
		System.out.printf("%1$tF %1$ta%n", date);
		System.out.printf("%1$tc%n", date);
	}
}

<think>好的,我现在需要回答用户关于Java控制台输出的问题。用户希望看到一些示例,并且可能需要了解不同的输出方法,比如普通输出、颜色输出以及处理乱码的情况。首先,我应该整理相关的知识点,并参考提供的引用内容,确保信息准确。 首先,用户提到了控制台输出的基本方法,比如使用System.out.println。这部分应该是基础,需要简单说明。然后,用户提供的引用中有关于使用jansi库处理乱码的示例(引用1),以及如何输出彩色字体(引用3)。这些都需要整合到回答中,作为高级用法。 接下来,我需要考虑结构是否清晰。按照用户的要求,回答应该分步骤,帮助用户逐步解决问题。可能需要分为基本输出格式化输出、彩色输出和解决乱码问题几个部分。每个部分都需要代码示例,并且确保代码正确,符合用户提供的引用中的示例。 同时,用户要求生成相关问题。我需要根据回答内容,提出相关的问题,比如性能分析、优化方法、应用场景等,但需要调整到控制台输出的主题上,比如乱码处理、颜色库的其他功能、输入输出的区别等。 还要注意引用标识。在引用示例代码或方法时,需要在段落末尾添加对应的引用标记,比如[^1]、[^3]等。需要确保引用的正确对应,比如引用1是关于jansi解决乱码,引用3是颜色输出,引用2是输入示例,但用户的问题主要关注输出,所以可能引用2的内容不需要过多涉及,但用户示例中引用了,可能需要检查是否相关。 另外,检查LaTeX格式是否正确。虽然问题中没有涉及数学公式,但根据系统级指令,所有行内数学表达式需要用$...$,但在这个问题中可能不涉及,所以可能不需要处理。但需要确保回答中没有数学公式的错误。 最后,确保使用中文回答,代码语法正确,比如Java代码的缩进和语法是否正确。例如,引用1中的jansi示例代码是否正确,是否需要调整。同时,用户提供的引用4是关于功能选择的输出,可以作为一个示例,展示菜单输出。 总结回答的结构: 1. 基本输出方法:System.out.println等 2. 格式化输出:printf和格式字符串 3. 彩色输出:使用ANSI转义码或jansi库 4. 处理中文乱码:使用jansi或其他方法 5. 输入输出结合:引用2中的示例,但用户问题主要关注输出,可能简要提及 然后,生成相关问题,比如如何处理乱码、其他颜色库、输入与输出的区别等。 现在需要将这些内容组织起来,确保每个部分都有代码示例,并正确引用来源。例如,彩色输出部分引用引用3和引用1中的jansi库,处理乱码引用引用1,基本输出引用用户提供的示例中的代码,比如引用4的菜单输出。 可能还需要补充一些常见的示例,比如使用System.out.printf进行格式化输出,比如输出数字、字符串格式等。 最后,检查所有引用是否在回答中被正确引用,并且没有遗漏。确保每个引用标记对应正确的引用内容。</think>### Java控制台输出示例与实现方法 #### 1. 基础输出方法 Java控制台输出的核心类是`System.out`,支持以下常用方法: - **`println`**:输出内容后换行 ```java System.out.println("Hello World"); // 输出后换行 ``` - **`print`**:输出内容不换行 ```java System.out.print("当前状态:"); System.out.print("运行中"); ``` - **菜单交互示例**(引用功能选择场景)[^4]: ```java System.out.println("请选择功能:"); System.out.println("1.添加 2.显示 3.删除 4.查询 5.退出"); ``` #### 2. 格式化输出 使用`printf`方法配合格式字符串实现: ```java String name = "Alice"; int age = 25; System.out.printf("姓名:%s,年龄:%d%n", name, age); // %n表示换行 ``` 格式说明符支持`%s`(字符串)、`%d`(整数)、`%f`(浮点数)等。 #### 3. 彩色输出 通过ANSI转义码或第三方库(如**jansi**)实现颜色控制: - **ANSI原生方式**(需终端支持)[^3]: ```java System.out.println("\u001B[31m红色文本\u001B[0m"); // 31为红色,0重置样式 ``` - **jansi库优化方案**(解决兼容性问题)[^1]: ```java import org.fusesource.jansi.Ansi; AnsiConsole.systemInstall(); System.out.println(Ansi.ansi().fgRed().a("红色文本").reset()); AnsiConsole.systemUninstall(); ``` #### 4. 中文乱码解决方案 使用**jansi**库可自动处理编码问题: ```java AnsiConsole.systemInstall(); System.out.println("你好,世界!"); // 正常显示中文 AnsiConsole.systemUninstall(); ``` #### 5. 输入输出结合 通过`BufferedInputStream`实现输入交互(引用输入示例)[^2]: ```java BufferedInputStream in = new BufferedInputStream(System.in); System.out.print("请输入字符串 <<< "); byte[] b = new byte[1024]; in.read(b); System.out.println("输出结果 >>> [" + new String(b).trim() + "]"); ``` ---
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值