Java基础篇(1)-格式化

JAVA && Spring && SpringBoot2.x — 学习目录

本文目录:

  1. 十进制数字格式化——DecimalFormat
  2. 数字格式化基类——NumberFormat
  3. 字符串格式化类——String.format()
  4. Linux输出格式化——printf

1. 十进制数字格式化(DecimalFormat)

decimal是对数字进行格式化,比如取2位小数,这是最常见的。Java提供了DecimalFormat类,可以快速的将数字格式化为需要的样子。

DecimalFormat类主要靠#和0两种占位符来指定数字长度。

  • 0表示如果位数不足,则以0填充,若是位数足够,则正常显示位数;
  • #表示如果位数不足,则该位不显示
DecimalFormat中0和#的区别
DecimalFormat参数的含义

源代码测试

DecimalFormat数字格式化

2. NumberFormat数字格式化

NumberFormat是所有数字格式的抽象基类。该类提供格式化和解析数字的接口。而DecimalFormat是NumberFormat的直接子类。

使用NumberFormat,格式化输出

3. String格式化

开发的时候,一段字符串的中间某一部分是需要可变的。我们就需要用到了String.format来填充内容。

3.1 需要的API(String.format)

  1. String.format()字符串常规类型格式化的两种重载方式
    • format(String format, Object… args) 新字符串使用本地语言环境,制定字符串格式和参数生成格式化的新字符串。
    • format(Locale locale, String format, Object… args) 使用指定的语言环境,制定字符串格式和参数生成格式化的字符串。

3.2 format的格式类型

转换符 详细说明 示例
%s 字符串类型 "小胖学编程"
%c 字符类型 'm'
%b 布尔类型 true
%d 整数类型(十进制) 88
%x 整数类型(十六进制) FF
%o 整数类型(八进制) 77
%f 浮点类型 8.888
%a 十六进制浮点类型 FF.35AE
%% 百分比类型 %(%特殊字符%%才能显示%)

2.3 源码及测试结果

测试代码及结果

3.4 String.format的高级功能

标志 详细说明 示例 结果
+ 为正数添加符号 ("%+d",15) +15
0 数字前面补0(加密常用) ("%04d",99) 0099
空格 整数之前添加空格 ("% 4d", 99) 99
, 以“,”对数字分组(常用显示金额) (“%,f”, 9999.99) 9,999.990000
( 使用括号包含负数 (“%(f”, -99.99) (99.990000)

3.5 源码及测试结果

源码及测试结果

4. Linux的输出格式化命令-printf

printf命令的语法:printf "指定的格式" "文本1" "文本2" "文本3"

printf命令详解

正如下图,每一个“文本”都会被当做参数传递到printf命令,而每一个传入的参数都会按照指定的"格式"被"格式化"。


image.png

%s是格式替换符,代替每一个传入的参数。所以我们指定的格式变成了abc\n def\n sss\n aaa\n

我们可以根据传入的参数不同,使用不同的“格式替换符”去替换

格式替换符 详细说明
%s 字符串类型
%f 浮点类型(也就是float或double)
%b 相对应的参数包含了转义字符,使用该替换符时对应的转义字符会被转义
%c ASCII字符,显示相对应参数的第一个字符
%d,%i 显示对应参数的第一个字符
%o 不带正负号的八进制值
%u 不带正负号的十进制值
%x 不带正负号的十六进制值,使用a-f表示10-15
%X 不带正负号的十六进制值,使用A-F表示10-15
%% 表示"%"本身

对应的转义字符:

转义字符 详细说明
\a 警告字符,通常为ASCII的BEL字符
\b 后退
\f 换页
\n 换行
\r 回车
\t 水平制表符
\v 垂直制表符
\ 字面意义上的反斜杠字符,即\本身

例子:(1)为传入的每个参数添加一对“括号”

[root@XXXXXX etc]$ printf "{%s}" abc def;echo ""
{abc}{def}

多格式替换符

多个格式替换符

我们所指定的“格式”中所包含的“格式替换符”的数量,就代表每次格式化参数的数量。上图中,指定的“格式”中包含两个“格式替换符”,那么每次printf进行“格式化”操作时,就传入两个参数。

传入三个格式替换符

输出格式的宽度

在"格式替换符"中间加上特定的数字。比如"%10s"中间的10表示当前替换符对应的输出宽度为10个字符宽,如果输出不足10个字符,则用空格补全。而这些数字我们称为“修饰符”,即对替换符进行修饰。

如何进行左对齐?只要在原来的修饰符前面加上"-","-"表示左对齐,默认不加"-"表示右对齐。

[root@XXXXXX etc]$ printf "{%10s}" abc def;echo ""
{       abc}{       def}
[root@XXXXXX etc]$ printf "{%-10s}" abc def;echo ""
{abc       }{def       }
设置格式的宽度

还有一种修饰符"+"
注意:"+"可不是代表右对齐,不加修饰符"-"时,默认是右对齐,那么"+"修饰符什么意思呢?

+修饰符的作用

当替换符对应的参数为数字时,可以使用+修饰符是为了给正数添加+号。

(敲黑板,划重点)到现在为止,我们接触了3个修饰符了。需要注意的是:(1)数字:输出当前替换符对应的输出宽度,默认右对齐;(2)-:修改对齐方式为左对齐;(3)+:为正数添加+符号;

数字修饰符的特殊用法

[root@XXXXXX etc]$ printf "%-12.3f\n" 19
19.000      
[root@XXXXXX etc]$ printf "%-12.3d\n" 19
019         
[root@XXXXXX etc]$ printf "%-0.3f\n" 19.1230
19.123
[root@XXXXXX etc]$ printf "%-0.3s\n" 19.1230
19.

修饰符作为正数我们知道,就是输出的宽度;
但是作为小数时:

  1. 当替换符为%f时,如果数字修饰符带有小数,则数字修饰符小数点后的数字表示对应的小数精度;
  2. 当替换符为%d时,如果数字修饰符带有小数,则数字修饰符后的小数表示整数的长度,长度不够时,高位用0补全;
  3. 当替换符为%s时,如果数字修饰符带有小数,则是截取字符串的长度;

参考文章:

朱双印——printf命令详解

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,684评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,143评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,214评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,788评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,796评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,665评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,027评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,679评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,346评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,664评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,766评论 1 331
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,412评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,015评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,974评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,073评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,501评论 2 343

推荐阅读更多精彩内容