草庐IT

Java格式化输出(包括对printf,print,println,format等的介绍)

韩跳跳、 2023-07-19 原文

目录

Java控制台输出

1.使用System.out.write方法输出

向控制台输出信息可以用输出流的write方法只是使用上没有print和println那么方便。实际上print和println方法也是对write的封装最终也是调用write向控制台写出的数据。
使用write时需要导入IOException,即在java文件前面加上 import java.io.IOException; write方法可能会抛出IOExcetion。
关于write方法不作详细介绍,平时还是用print或println更好

2 使用System.out.println方法输出

在idea查看,输入System.out.println()实际上是调用了以下这些方法(函数重载)

System.out.println()调用后会直接在输出之后添加一个换行,如果不写参数就是只起一个换行的作用。
其中如果参数是char[],会直接输出char[]中的所有元素,元素之间没有任何分隔符,仿佛输出了一个字符串。

还有一个比较特殊的参数是Object,Object是Java中所有类的父类,如果参数是Object对象,将直接输出Object的地址或者null,除非对应的Object重写了自己的toString方法,这里不做过多叙述。

我们可以利用字符串的连接操作,实现输出各种各样的格式,例如输出:x=5的形式,输出x的值

int x=5;
System.out.println("x="+x);

3 使用System.out.print方法输出

只比System.out.println()少了一个没有参数的方法。
System.out.print与System.out.println的唯一区别就是,这个没有添加换行。

4 System.out.printf

printf的底层就是format,俩种方法的用法没有任何区别,实际上,printf就只是调用了一下format而已

大胆猜测,java中之所以有printf这个看似多余的东西是当初为了吸引c程序员👀

下面将详细介绍其用法

格式化输出详细介绍

System.out.format(); System.out.printf();
俩者用法一致,下面以format举例说明。
当我们需要格式化输出一些数据,只是使用System.out.println();就有点不够用了,这时就需要用到format方法了

System.out提供了格式化的输出方法format,format的第一个参数是一个模板,模板面有一些占位符,再通过后面的参数替换模板中的占位符完成整个信息的输出

举个例子:

String name="LiLi";
int age=8;
char sex='男';
float grade=52.5;
System.out.format("姓名:%s, 年龄:%d, 性别:%c, 成绩:%.1f\n", name, age, sex, grade);

输出:姓名:LiLi, 年龄:8, 性别:男, 成绩:52.5
其中%c,%s等就叫做占位符,分别代表字符和字符串,它们将被后边出现的对应的变量的值替换掉。像%.1f是%f中又添加了.f 表示输出一个1位的小数。

常用占位符:

占位符说明
%d格式化输出整数
%f格式化输出浮点数
%e格式化科学计数法的浮点数
%s格式化输出字符串

当然不可能只有这么点了,下边才是大头👀

格式化整数

既可以格式化基本数据类型,也可以格式化它们的包装类

%d :格式化十进制整数
%o :格式化八进制整数
%x :格式化小写十六进制整数,如:abc58
%X :格式化大写十六进制整数,如:ABC58

修饰符

“+”:格式化正整数时强制添加上正好,如%+d可将123格式化位+123
“,”:格式化整数时按“千”分组,例如:%,d可将1234567890格式化位1,234,567,890
它俩可以组合使用,如:%+,d

数据的宽度

%md或%-md指定格式化整数的长度最少为m

如%6d可将123格式化为“ 123”,左边三个空格,即如果数字的长度不足6,则在格式化的数字左边添加空格使得整体长度为6(左边添加空格即右对齐
%-6d使得结果左对齐,即在右边添加空格,如%-6d可将123格式化为“123 ”,右边三个空格

格式化浮点数

既可以格式化基本数据类型,也可以格式化它们的包装类

修饰符

“+” :格式化正数时添加正号
“,”:将正数部分按千分位
它俩可以组合使用,如:%+,f

限制小数位数与宽度

“%.nf”可以限制小数的位数为n(遵循四舍五入)
“%mf”可以规定数据的宽度为m,长度不足补空格,默认居右(%-mf,居左)
组合使用:

System.out.printf("%7.3f",0.1235);

结果:0.124 (还有俩个空格,“.”也占一个长度)

String也可以调用format方法

String也可以调用format方法,用法与上述完全一致,结果返回一个字符串对象
例:

String s=String.format("%d",12345);

s的值为12345


有关Java格式化输出(包括对printf,print,println,format等的介绍)的更多相关文章

  1. ruby - 使用 ruby​​ 将 HTML 转换为纯文本并维护结构/格式 - 2

    我想将html转换为纯文本。不过,我不想只删除标签,我想智能地保留尽可能多的格式。为插入换行符标签,检测段落并格式化它们等。输入非常简单,通常是格式良好的html(不是整个文档,只是一堆内容,通常没有anchor或图像)。我可以将几个正则表达式放在一起,让我达到80%,但我认为可能有一些现有的解决方案更智能。 最佳答案 首先,不要尝试为此使用正则表达式。很有可能你会想出一个脆弱/脆弱的解决方案,它会随着HTML的变化而崩溃,或者很难管理和维护。您可以使用Nokogiri快速解析HTML并提取文本:require'nokogiri'h

  2. ruby-on-rails - 如何从 format.xml 中删除 <hash></hash> - 2

    我有一个对象has_many应呈现为xml的子对象。这不是问题。我的问题是我创建了一个Hash包含此数据,就像解析器需要它一样。但是rails自动将整个文件包含在.........我需要摆脱type="array"和我该如何处理?我没有在文档中找到任何内容。 最佳答案 我遇到了同样的问题;这是我的XML:我在用这个:entries.to_xml将散列数据转换为XML,但这会将条目的数据包装到中所以我修改了:entries.to_xml(root:"Contacts")但这仍然将转换后的XML包装在“联系人”中,将我的XML代码修改为

  3. java - 等价于 Java 中的 Ruby Hash - 2

    我真的很习惯使用Ruby编写以下代码:my_hash={}my_hash['test']=1Java中对应的数据结构是什么? 最佳答案 HashMapmap=newHashMap();map.put("test",1);我假设? 关于java-等价于Java中的RubyHash,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questions/22737685/

  4. ruby-on-rails - 将 Ruby 中的日期/时间格式化为 YYYY-MM-DD HH :MM:SS - 2

    这个问题在这里已经有了答案:Railsformattingdate(4个答案)关闭4年前。我想格式化Time.Now函数以显示YYYY-MM-DDHH:MM:SS而不是:“2018-03-0909:47:19+0000”该函数需要放在时间中.现在功能。require‘roo’require‘roo-xls’require‘byebug’file_name=ARGV.first||“Template.xlsx”excel_file=Roo::Spreadsheet.open(“./#{file_name}“,extension::xlsx)xml=Nokogiri::XML::Build

  5. ruby - 我可以将我的 README.textile 以正确的格式放入我的 RDoc 中吗? - 2

    我喜欢使用Textile或Markdown为我的项目编写自述文件,但是当我生成RDoc时,自述文件被解释为RDoc并且看起来非常糟糕。有没有办法让RDoc通过RedCloth或BlueCloth而不是它自己的格式化程序运行文件?它可以配置为自动检测文件后缀的格式吗?(例如README.textile通过RedCloth运行,但README.mdown通过BlueCloth运行) 最佳答案 使用YARD直接代替RDoc将允许您包含Textile或Markdown文件,只要它们的文件后缀是合理的。我经常使用类似于以下Rake任务的东西:

  6. java - 从 JRuby 调用 Java 类的问题 - 2

    我正在尝试使用boilerpipe来自JRuby。我看过guide从JRuby调用Java,并成功地将它与另一个Java包一起使用,但无法弄清楚为什么同样的东西不能用于boilerpipe。我正在尝试基本上从JRuby中执行与此Java等效的操作:URLurl=newURL("http://www.example.com/some-location/index.html");Stringtext=ArticleExtractor.INSTANCE.getText(url);在JRuby中试过这个:require'java'url=java.net.URL.new("http://www

  7. ruby - 是否有用于序列化和反序列化各种格式的对象层次结构的模式? - 2

    给定一个复杂的对象层次结构,幸运的是它不包含循环引用,我如何实现支持各种格式的序列化?我不是来讨论实际实现的。相反,我正在寻找可能会派上用场的设计模式提示。更准确地说:我正在使用Ruby,我想解析XML和JSON数据以构建复杂的对象层次结构。此外,应该可以将该层次结构序列化为JSON、XML和可能的HTML。我可以为此使用Builder模式吗?在任何提到的情况下,我都有某种结构化数据-无论是在内存中还是文本中-我想用它来构建其他东西。我认为将序列化逻辑与实际业务逻辑分开会很好,这样我以后就可以轻松支持多种XML格式。 最佳答案 我最

  8. java - 我的模型类或其他类中应该有逻辑吗 - 2

    我只想对我一直在思考的这个问题有其他意见,例如我有classuser_controller和classuserclassUserattr_accessor:name,:usernameendclassUserController//dosomethingaboutanythingaboutusersend问题是我的User类中是否应该有逻辑user=User.newuser.do_something(user1)oritshouldbeuser_controller=UserController.newuser_controller.do_something(user1,user2)我

  9. java - 什么相当于 ruby​​ 的 rack 或 python 的 Java wsgi? - 2

    什么是ruby​​的rack或python的Java的wsgi?还有一个路由库。 最佳答案 来自Python标准PEP333:Bycontrast,althoughJavahasjustasmanywebapplicationframeworksavailable,Java's"servlet"APImakesitpossibleforapplicationswrittenwithanyJavawebapplicationframeworktoruninanywebserverthatsupportstheservletAPI.ht

  10. ruby-on-rails - 事件管理员日期过滤器日期格式自定义 - 2

    是否有简单的方法来更改默认ISO格式(yyyy-mm-dd)的ActiveAdmin日期过滤器显示格式? 最佳答案 您可以像这样为日期选择器提供额外的选项,而不是覆盖js:=f.input:my_date,as::datepicker,datepicker_options:{dateFormat:"mm/dd/yy"} 关于ruby-on-rails-事件管理员日期过滤器日期格式自定义,我们在StackOverflow上找到一个类似的问题: https://s

随机推荐