Java如何格式化输出?

Java格式化输出(包括对printf,print,println,format等的介绍) 目录Java控制台输出1.使用System.out.write方法输出2 使用System.out.println方法输出3 使用System.out.print方法输出4 System.out.printf格式化输出详细介绍 Java控制台输出 1.使用System.out.write方法输出 向控制台输出信息可以用输出流的write方法只是使用上没有print和println那么方便。实际上print和println方法也是对write的封装最终也是调用write向控制台写出的数据。 使用write时 阅读详情

  在JavaSe5中,推出了C语言中printf()风格的格式化输出。这不仅使得控制输出的代码更加简单,同时也给与Java开发者对于输出格式与排列更大的控制能力。今天,我们开始学习Java中的格式化输出。

System.out.format()

        由于内容比较简单,我们通过实例来加以说明。项目结构如下:

​

        Java Se5引入的format方法可用于PrintStream或PrintWriter对象,其中也包括System.out对象。

package com.tomhu.format;

public class FormatTest1 {

    public static void main(String[] args) {
        int x = 5;
        double y = 3.141592;

        // 一般方式
        System.out.println("x = " + x + ", y = " + y);
        // printf()方式
        System.out.printf("x = %d, y = %f\n", x, y);
        // format()方式
        System.out.format("x = %d, y = %f\n", x, y);
    }
}

        输出的结果如下:

x = 5, y = 3.141592
x = 5, y = 3.141592
x = 5, y = 3.141592

        可以看到,format与printf是等价的,它们只需要一个简单的格式化字符串,加上一串参数即可,每个参数对应一个格式修饰符。

public PrintStream printf(String format, Object ... args) {
    return format(format, args);
}

        在format的具体代码中,其实就是调用Formatter的format方法:formatter.format(Locale.getDefault(), format, args);

public PrintStream format(String format, Object ... args) {
    try {
        synchronized (this) {
            ensureOpen();
            if ((formatter == null)
                || (formatter.locale() != Locale.getDefault()))
                formatter = new Formatter((Appendable) this);
            formatter.format(Locale.getDefault(), format, args);
        }
    } catch (InterruptedIOException x) {
        Thread.currentThread().interrupt();
    } catch (IOException x) {
        trouble = true;
    }
    return this;
}

Formatter类

        在Java中,所有新的格式化功能都由Formatter类处理,上述的printf与format也是。可以将Formatter看作是一个翻译器,它将你的格式化字符串与数据翻译成需要的结果。当你创建一个Formatter对象的时候 ,需要向其构造器传递一些信息,告诉它最终的结果将向哪里输出

package com.tomhu.format;

import java.util.Formatter;

public class FormatTest2 {

    public static void main(String[] args) {
        String name = "huhx";
        int age = 22;
        
        Formatter formatter = new Formatter(System.out);
        formatter.format("My name is %s, and my age is %d ", name, age);
        formatter.close();
    }
}

        它的输出结果如下:

My name is huhx, and my age is 22 

格式化说明符

        在插入数据时,如果想要控制空格与对齐,就需要精细复杂的格式修饰符,以下是其抽象的语法:

%[argument_index$][flags][width][.precision]conversion

The optional argument_index is a decimal integer indicating the position of the argument in the argument list. The first argument is referenced by "1$", the second by "2$", etc.

The optional flags is a set of characters that modify the output format. The set of valid flags depends on the conversion.

The optional width is a non-negative decimal integer indicating the minimum number of characters to be written to the output.

The optional precision is a non-negative decimal integer usually used to restrict the number of characters. The specific behavior depends on the conversion.


The required conversion is a character indicating how the argument should be formatted. The set of valid conversions for a given argument depends on the argument's data type.

        最常见的应用是控制一个域的最小尺寸,这可以通过指定width来实现。Formatter对象通过在必要时添加空格,来确保一个域至少达到某个长度。在默认的情况下,数据是右对齐的,通过"-"标志可以改变对齐的方向。

        与width相对的是precision(精确度),它用来指明最大尺寸。width可以应用各种类型的数据转换,并且其行为方式都一样。precision则不一样,不是所有类型的数据都能使用precision,而且,应用于不同的类型的数据转换时,precision的意义也不同。

  • precision应用于String时,它表示打印String时输出字符的最大数量

  • precision应用于浮点数时,它表示小数点要显示出来的位数。默认是6位小数,如果小数位数过多则舍入,过少则在尾部补零。

  • 由于整数没有小数部分,所以precision不能应用于整数。如果你对整数应用precision,则会触发异常

package com.tomhu.format;

import java.util.Formatter;

public class FormatTest3 {
    static Formatter formatter = new Formatter(System.out);

    public static void printTitle() {
        formatter.format("%-15s %-5s %-10s\n", "huhx", "linux", "liuli");
        formatter.format("%-15s %-5s %-10s\n", "zhangkun", "yanzi", "zhangcong");
        formatter.format("%-15s %-5s %-10s\n", "zhangkun", "yanzhou", "zhangcong");
    }

    public static void print() {
        formatter.format("%-15s %5d %10.2f\n", "My name is huhx", 5, 4.2);
        formatter.format("%-15.4s %5d %10.2f\n", "My name is huhx", 5, 4.1);
    }
    
    public static void main(String[] args) {
        printTitle();
        System.out.println("----------------------------");
        print();
        formatter.close();
    }
}

        它的输出结果如下:

huhx            linux liuli     
zhangkun        yanzi zhangcong 
zhangkun        yanzhou zhangcong 
----------------------------
My name is huhx     5       4.20
My n                5       4.10

Formatter转换

下图包含了最常用的类型转换:

        String.format()是一个static方法,它接受与Formatter.format()方法一样的参数,但返回一个String对象。当你只需要用format方法一次的时候,String.format()还是很方便的。

package com.tomhu.format;

public class FormatTest4 {

    public static void main(String[] args) {
        int age = 22;
        String name = "huhx";

        String info = String.format("My name is %s and my age is %d", name, age);
        System.out.println(info);
    }
}

        它的输出结果如下:

My name is huhx and my age is 22

        其实String.format方法的实质还是Formatter.format(),只不过是做了简单封装而已:

public static String format(String format, Object... args) {
    return new Formatter().format(format, args).toString();
}

简单的十六进制转换工具

package com.tomhu.format;

public class FormatTest5 {
    
    public static String format(byte[] data) {
        StringBuilder builder = new StringBuilder();
        int n = 0;
        for(byte b: data) {
            if (n %16 == 0) {
                builder.append(String.format("%05x: ", n));
            }
            builder.append(String.format("%02x ", b));
            n ++;
            if (n % 16 == 0) {
                builder.append("\n");
            }
        }
        builder.append("\n");
        return builder.toString();
    }

    public static void main(String[] args) {
        String string = "my name is huhx, welcome to my blog";
        System.out.println(format(string.getBytes()));
    }
}

输出结果如下:

00000: 6d 79 20 6e 61 6d 65 20 69 73 20 68 75 68 78 2c 
00010: 20 77 65 6c 63 6f 6d 65 20 74 6f 20 6d 79 20 62 
00020: 6c 6f 67 

Java学习视频

Java基础:

Java300集,Java必备优质视频_手把手图解学习Java,让学习成为一种享受

Java项目:

【Java游戏项目】1小时教你用Java语言做经典扫雷游戏_手把手教你开发游戏

【Java毕业设计】OA办公系统项目实战_OA员工管理系统项目_java开发

JAVA 中数字格式化总结 在Java中,数字格式化是一项非常常见且重要的功能,它允许开发者以特定的格式展示数字,无论是整数、浮点数、百分比还是货币值等。 阅读详情

相关推荐

【 Java 】格式化输出

从来都记不住这个东西,在这写写。 两个方法: (1)String.formant("%.4f",1.23234355); (2) System.out.printf(""%.4f",1.23234355); 需要注意一点,后面对应的类型,一定要和格式化字符串一致,否者,会出错,耽误时间。 下面是转载过来的。 用于printf的转换符如下表: 转换符 类型  举例 d 十进制整数   159 x 十...

Friday 1315

Java中的printf()方法

Java中类似于C语言的print()格式化输出方法详解

Lov1_BYS的博客 8157

基于Dify构建银行智能客服:从意图识别到多RAG架构的实战解析

本文深入解析了如何利用Dify平台构建银行智能客服系统。从传统客服痛点出发,详细阐述了基于意图识别精准分类用户需求,并通过多RAG架构解决知识混淆问题,实现高效、准确的业务响应。文章重点介绍了结合工具调用实现业务流程自动化,并强调了数据本地化部署、内容安全过滤等银行级安全合规实践,为金融行业AI应用提供了实战指南。

yog99的博客 926

Java——格式化输出

在JavaSe5中,推出了C语言中printf()风格的格式化输出。这不仅使得控制输出的代码更加简单,同时也给与Java开发者对于输出格式与排列更大的控制能力。今天,我们开始学习Java中的格式化输出。

m0_64363449的博客 1598

全新RGB-D及平面法线数据集DIODE

丰田工业大学联合芝加哥大学和北航发布全新RGB-D及平面法线数据集 DIODE (Dense Indoor and Outdoor DEpth)。

qq_43477338的博客 1539

DexProtector内存校验绕过与DEX提取实战

DEX文件是Android应用的核心执行单元,其动态加载与运行时保护机制直接关系到App安全强度。DexProtector作为主流商业加固方案,摒弃传统文件级防护,转而依托ART虚拟机下的匿名内存映射段(anonymous mmap)构建多维校验体系——涵盖字节码完整性校验、内存页属性检测及运行时环境感知。其技术价值在于将防护锚点从静态APK迁移至动态内存态,大幅提升逆向门槛。典型应用场景包括金融类App的防篡改加固、游戏客户端的反外挂保护,以及政企应用的合规性安全增强。本文聚焦DexProtector v

weixin_30315435的博客 713

数字与字符串系列教材 (四)- Java 使用printf或format 进行格式化输出

为了使得同一个java程序的换行符在所有的操作系统中都有一样的表现,使用%n,就可以做到平台无关的换行。Java是跨平台的编程语言,同样的代码,可以在不同的平台使用,比如Windows,Linux,Mac。如果不使用格式化输出,就需要进行字符串连接,如果变量比较多,拼接就会显得繁琐。(1)在DOS和Windows中,每行结尾是 “\r\n”;就是回到一行的开头 --- '\r' 回车(return)(3)Mac系统里,每行结尾是只有 "\r"。然而在不同的操作系统,换行符是不一样的。其他常用的格式化方式。

Lan_ht的博客 250

从零开始理解异构算力调度:全国一体化算力算网平台实战解析

本文深入解析了异构算力调度技术在全国一体化算力算网平台中的实战应用。通过资源抽象层设计、动态感知引擎和跨云调度算法,实现AI训练任务的高效资源分配,显著提升计算效率并降低成本。特别针对GPU等异构算力的智能调度方案,为多云协同环境下的AI开发提供实用指南。

weixin_28730927的博客 332

Java中格式化输出

概要格式化控制台输出要点提示:常用的格式标识符格式标识符的解释指定宽度和精度的例子格式化输出语法注意的问题应用 格式化控制台输出 要点提示: 在控制台上显示格式化输出:System.out.printf方法 常用的格式标识符 标识符 输出 举例 %d 布尔值 true或false %c 字符 ‘a’ %d 十进制整数 200 %f 浮点数 45.4600000 %e...

Clearlight's Blog 5857

如何设计QR反激变换器

摘要:本文分析了基于GaN技术的PD适配器市场现状,重点探讨了准谐振反激变换器(QR Flyback)的工作原理及设计方法。文章首先介绍了反激变换器的三种工作模式(CCM、DCM、CRM/QR)及其特点,指出QR模式通过谷底开通技术能显著降低开关损耗。随后以65W适配器为例,详细阐述了变压器参数设计流程,包括匝比确定、原边电感计算和绕组匝数设计等关键步骤。文章强调QR反激变换器凭借高效率、小体积和低成本优势,已成为20W-65W PD适配器的主流拓扑方案,配合GaN技术进一步提升了功率密度和便携性。

m0_62868254的博客 1496

Python实战:5分钟搞定高德地图API批量地址转经纬度(附完整代码)

本文提供了一套完整的Python解决方案,利用高德地图Web服务API,实现批量地址到经纬度坐标的自动化转换。文章包含从API申请、核心代码编写到错误处理与性能优化的全流程实战指南,并附赠数据可视化方法,帮助数据分析师和开发者快速提升地理信息处理效率。

weixin_29047919的博客 582

Java格式化输出的四种方法

一、System.out.printf() Java SE5推出了C语言printf()风格的格式化输出功能。 String str="Java"; double pi=3.14; int i=100; //"%"表示进行格式化输出,其后是格式的定义 System.out.printf("%f\n",pi);//"f"表示格式化输出浮点数 System.out.printf("%d\n",i);//"d"表示格式化输出十进制整数 System.out.printf("%o\n",i);//"o"表示格式化输

qq_44111805的博客 4万+

电机系列(1) - foc最基本原理、clark变换 、park变换、附代码

什么是FOC? FOC(Field-Oriented Control),直译是磁场定向控制,也被称作矢量控制 (VC,Vector Control) ,是目前无刷直流电机(BLDC)和永磁同步电机(PMSM)高效控制的最优方法之一。FOC旨在通过精确地控制磁场大小与方向,使得电机的运动转矩平稳、噪声小、效率高,并且具有高速的动态响应。 简单来说就是,FOC是一种对无刷电机的驱动控制方法,它可以让我们对无刷电机进行 “像素级” 控制,实现很多传统电机控制方法所无法达到的效果。 因为所谓的“矢量控制”其实就是

nepqiu的博客 7万+

Java格式化XML输出

之前通过DOM修改了Dom树之后,保存输出xml发现格式总是

zoroday的专栏 4938

智能合约监控告警:提示工程架构师用AI Prompt实现精准预警

当AI大模型(尤其是代码理解模型如CodeLlama、GPT-4 Code)与区块链数据结合,智能合约监控迎来范式革新。AI模型如何精准理解智能合约的业务特殊性?如何避免"AI幻觉"导致的误报?如何让模型学会区分"正常异常"与"攻击前兆"?答案藏在"提示工程"(Prompt Engineering)中。理解特定智能合约的业务逻辑(如DeFi协议的清算机制、NFT的铸造规则)识别复杂的攻击模式(如重入攻击的调用链特征、闪电贷的套利路径)结合链上链下数据进行多维度推理(如关联价格波动与异常交易)

AI架构全栈开发实战笔记 1010

最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版

Part-E1-SDIO-Specification-Ver4.00-Final-120220.pdf:最新的sdio 4.0 spec 协议标准 带书签 高清完整PDF版,包括SDIO 接口的外设,SDIO 接口官方协议等。

java print 格式化输出_java 格式化输出方法

在javaSE5中推出了printf方法来输出文本到控制台,在java中现在有如下方法可以输出文本:1、System.out.println(、、、、)  //输出并换行2、System.out.format("%d,%f",1,1.1);    //格式化输出3、System.out.printf("%d,%f",1,1.1);     //格式化输出4、System.out.print(、、、...

weixin_33206743的博客 4375

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

一篇文章让你学会Java之格式化输出

返回格式化后的字符串。直接输出格式化字符串到控制台。Formatter提供了更多的控制,可以用于自定义输出流。

Weiki的博客 3568

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

java print 格式化输出_java字符串的格式化输出

代码如果不进行格式化的处理,那么在查阅上会浪费不少的时间。今天我们要说的是字符串的格式化处理,作为基础编程内容,相信大家都字符串都不陌生。我们可以把字符串进行连接,通过这种方法实现格式化的操作。下面我们就格式化的说明、字符串符号图解、实例带来介绍。1.说明java在 JDK1.5 后对 PrintStream 功能进行了扩充,增加了格式化输出功能。直接使用 Print 即可。但是输出的时候需要指...

weixin_36350504的博客 1530

java 的格式化输出

java 的格式化输出 如何控制java对字符串进行格式化输出? 1.示例 同c语言的 printf 函数, 代码: public class PrintFormat { public static void main(String[] args) { double d = 3.1415926; int count = 1; Sys...

说文科技,做有态度的研究。 1747

java格式化输出

在做算法题时经常要格式化输出,在这里,我总结了一下java的格式化输出:使用方法:System.out.printf();数据类型    转化代码      举例                   格式化举例     转化后输出int d 512 "%6d" " 512" ...

龙之竹的博客 1569

Java基础之格式化输出

文章目录 - 用法 - 常用标识符 - 实例

weixin_45659364的博客 919

java 格式化输出xml_Java格式化XML输出

Java格式化输出XML,范例已清晰演示两接口使用。import java.io.ByteArrayOutputStream;import java.io.IOException;import java.io.StringReader;import java.io.UnsupportedEncodingException;import javax.xml.parsers.DocumentBuild...

weixin_39987926的博客 774

Java的格式化输出

System.out的print和println方法,可以向控制台输出不同类型的数据,可以满足程序调试信息的输出要求。在实际应用中,输出数据时,要求数据必须按照一定的格式输出,如数据精度要求,小数点后保留2位有效数字、按照规定的格式输出日期、按照表格方式输出数据等要求。 System.out的printf方法可以对数据进行格式化输出,printf方法在Java API 文档中声明如下: voi...

淡淡的宁静的博客 3377

java格式化输出_跟我学java编程—Java的格式化输出

System.out的print和println方法,可以向控制台输出不同类型的数据,可以满足程序调试信息的输出要求。在实际应用中,输出数据时,要求数据必须按照一定的格式输出,如数据精度要求,小数点后保留2位有效数字、按照规定的格式输出日期、按照表格方式输出数据等要求。System.out的printf方法可以对数据进行格式化输出,printf方法在Java API 文档中声明如下:void p...

weixin_33501348的博客 485

java在控制台的格式化输出

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

离名 2619

Java格式化输出

import java.util.Date; /** * 对于格式化输出的总结 * 醒~ */ class Main { public static void main(String[] args) { /*** 输出字符串 ***/ // %s表示输出字符串,也就是将后面的字符串替换模式中的%s System.out.printf("%s", new Integer(1212)); // %n表示换行 Syst

欢迎进来观看——醒的博客 304
上一篇: Java NIO与Java BIO的区别是什么?
下一篇: Java需要了解哪些技能?
程序媛_小白
博客等级 码龄5年 322粉丝 163原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值