令IDEA控制台打印输出的文本对齐 以及 实现这个功能时个人的体会

String.format处理中文对齐问题_Super 米的博客-CSDN博客

在控制台打印输出时,抬头和下面toString循环输出的字符串str之间的对齐可以靠/t

而str之间 如果是全英文字符串 那么可以使用format指定最小长度进行对齐

但是如果str中存在中文 由于format不认识中文所以会进行忽略 这就造成了字符串之间的差异 最后就导致format达不到想要的效果

此时直观表现就是导致后面跟着的其他数据无法对齐

要解决这个办法就需要使用工具类,对于存在中文的字符串进行处理

原理就是 既然format会忽略中文 那么我就让format格式中的数字根据字符串中的中文字符数减掉相应数量

工具类下的代码:

实际调用:

效果:

这里行与行之间依然不够整齐是因为中文的宽度和空格、英文、数字不相同 因此虽然format动态调整了补足的空格数量 但中文造成的影响还是无法完全消除,除非更换显示的字体——等线字体

而抬头和下面内容的对齐 就得靠\t和空格一个个去调整了 或者再写一个工具类 自动计算并输出空格 可以使用stringBuilder 可变字符串


上面的方法涉及到的知识点

写在前面的话:通过上面和下面这两条知识点的梳理

①中文并不能被format识别

②\t并不是硬性对应8个字节 根据编译器不同\t对应字节数不同 而阿里出台的java开发标准要求对应4个

③IDEA中控制台的输出显示受字体的影响 但是通常情况下 字母、数字和空格1:1对应 汉字和空格1:2对应

④编码规则影响的是文档的大小 UTF-8比GBK储存更多的数据 相应的文档会更大一点 并不是说UTF-8下IDEA中控制台的输出显示就变成了一个汉字对应3个空格

String.format("%-数字s",str)  表示左对齐 并设定了字符串最少占据的字节长度 str不足指定数字的字节长度时用空格补足

(1条消息) java输出字符串对齐_Java在控制台中对齐字符串_我是你们的老贞的博客-CSDN博客

(1条消息) Java toString方法返回字符串的对齐_Jrthur_A的博客-CSDN博客

(1条消息) JAVA字符串格式化-String.format()的使用_lonely_fireworks的专栏-CSDN博客_java string.format用法

string.format()详解 - 双间 - 博客园 (cnblogs.com)

\t会判断并补足当前字符串长度至8的倍数或4的倍数(根据编译器设定而变化)

(1条消息) Java中"\t"表示几个空格_zgy956645239的博客-CSDN博客

假设编译器中\t设定为补足8的倍数 那么:

假如str长度为2 那么\t会补上6个空格  此时整个字符串占据8个字节长度

假如str长度为9 那么\t就会补上8-(9-8)=7个空格 此时整个字符串占据16个字符长度(因为原字符长度为9 已经超过8个字符长度 即一个\t的长度)

虽然说学习的时候了解到的知识是\t会补足8个字节 但是IDEA中默认一个\t只会补足4 而不是8

同时实际开发中普遍遵循的阿里出版的JAVA开发标准也提到\t要设置为4个空格,所以对于\t 要特别的记住它的这一情况——\t 开发时补足4个空格

阿里出版的JAVA开发标准:

控制台输出以及设置中的显示如图:

③关于IDEA中控制台的输出显示和文档的编码规则

后者会决定前者的中文显示时会不会乱码 但是在前者不会乱码的情况下 后者的更改不会影响前者一个汉字打印出来时占据的空间——字体才会影响

控制台中的输出显示效果受到字符的字体影响

对于IDEA的控制台而言 以一个空格为基础长度单位

那么字母、数字通常情况下就是一个字符对应一个空格长度 如果字体变化那么就可能产生一些变化

同样的 通常情况下汉字的一个字符对应两个空格长度 如果选用了不同的字体 那么根据不同的字 就会产生一些宽度上的差异 有”胖“有”瘦“

而format中的数字只会去记录有多少个英文/数字字符——汉字会被忽略

编码规则则是另一个领域的知识——文档大小

指的是当文档编码格式为GBK时

一个英文/数字字符占据1个字节的空间 一个汉字字符占据2个字节的空间

当文档编码格式为UTF-8时

一个英文/数字字符占据1个字节的空间 一个汉字字符占据3个字节的空间

IDEA中默认使用的编码格式是GBK 这与阿里倡议的开发标准也不同 所以我们在使用IDEA时得做好修改

IDEA 统一设置编码为utf-8编码_chinassj的博客-CSDN博客_idea字符集设置为utf8

阿里出版的JAVA开发标准:

  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值