Java输出字符串对齐问题

时间:2023-01-03 10:57:42
用户需求是这样,从数据表中读取数据,写到一个TXT接口文件
文件内容中每一列的长度固定(不够的右边补空格),即内容显示每一列都是左对齐的。
但有一个棘手的问题,就是用户的数据里面偶尔包含有特殊字符(比如“αФ×’—φ),会导致错位(如图)。
我的程序中是用utf-8读取字符串的字节数来判断每一列需补多少空格,但是当有这些特殊符号时,它们的字节数都不一样的,所以会导致错位。
在用户需求以及数据内容不能改变的情况下,有什么方法可以解决? Java输出字符串对齐问题

22 个解决方案

#1


可以导出到excel

#2


Txt接口是跟用户第三方系统交互用的,不能改变格式

#3


引用 1 楼 a394149398 的回复:
可以导出到excel


引用 2 楼 luman2002 的回复:
Txt接口是跟用户第三方系统交互用的,不能改变格式


这里可能要明确下“每一列的长度固定”中,长度的含义。
是指字节个数呢,还是普通的字符串长度?
如果是字节个数,则所有字符串都转字节,再取字节数组length。
如果是字符串长度,直接取字符串length()。

#4


问题是你的文本编辑器不是根据UTF8字节的长度来显示每个字符的占位空间的。
此外即便你现在手工把它调准了,如果换一种编辑器(如Word)打开的话,可能又会由于字体不一致而导致再次对不齐。
所以呢,LZ需要以用户真正用来打开文件的编辑器(或者解析程序)的规则为基准来判别每个字符的长度并汇总成字符串的长度-- 也就是说,自己写一个Length()方法,为不同字符认定不同长度。

#5


该回复于2016-02-17 11:34:51被版主删除

#6


能不能这样想,既然你每一列都是固定长度,那能不能取没列的最大长度作为固定长度,这样你填补空格都要方便一点呢

#7


该回复于2016-02-17 11:35:02被版主删除

#8


与字节多长无关.
有这么几个问题.
字体,必须找个对齐的字体才行.你写程序的懂我说的吧?
固定个程度,不足的补空格吧...

#9




通过控制字符编码格式可以控制字节数吧!

Java输出字符串对齐问题

#10


神路过。。。 Java输出字符串对齐问题

#11


该回复于2016-02-17 11:37:02被版主删除

#12


learning~

#13


数据分为几段对齐 是这个意思吧
每段取 可能的最大长度
填入数据 不足的地方用空格补足

#14


这是什么里面的?

#15


int length = "“αФ×’—φ".getBytes().length;
根据字符串的字节长度补位

#16


该回复于2016-02-18 17:20:55被管理员删除

#17


这样试下, 列与列之间,用制表符\t分隔。。。

#18


学习学习下。。。。。

#19


还是头一次见拿TXT做交互的。。。。

#20


LZ你遇到的问题应该不是特别复杂吧。
你是思路可能需要换一下,你写的这个例子保证了列与列之间空格数相同了。。没有符合要求额。
你应该按上面几位说的那样思路来:
1.给每列设定一个固定的宽度,保证不小于这列数据的最大长度;同时列与列是等间距。比如A列20字节长度;B列20字节长度;C列20字节长度等等;列与列之间相隔10个字节长度。
2.然后对于每一列,都要判断读取到的数据的长度,strLength,然后再在这列补20-strLength个字节空格。然后再加入10个空格。
3.循环2步骤

#21


需要确认需求 如果是字节一定 就填充字节 如果是字符一定 就填充字符

#22


你看你的数据格式差不多都一样,就第二列和第三列的数据可能影响格式,你自己大致估算一下这两列中最长的字符有多少,然后定一个标准比,不足的用空格补齐就好了

#1


可以导出到excel

#2


Txt接口是跟用户第三方系统交互用的,不能改变格式

#3


引用 1 楼 a394149398 的回复:
可以导出到excel


引用 2 楼 luman2002 的回复:
Txt接口是跟用户第三方系统交互用的,不能改变格式


这里可能要明确下“每一列的长度固定”中,长度的含义。
是指字节个数呢,还是普通的字符串长度?
如果是字节个数,则所有字符串都转字节,再取字节数组length。
如果是字符串长度,直接取字符串length()。

#4


问题是你的文本编辑器不是根据UTF8字节的长度来显示每个字符的占位空间的。
此外即便你现在手工把它调准了,如果换一种编辑器(如Word)打开的话,可能又会由于字体不一致而导致再次对不齐。
所以呢,LZ需要以用户真正用来打开文件的编辑器(或者解析程序)的规则为基准来判别每个字符的长度并汇总成字符串的长度-- 也就是说,自己写一个Length()方法,为不同字符认定不同长度。

#5


该回复于2016-02-17 11:34:51被版主删除

#6


能不能这样想,既然你每一列都是固定长度,那能不能取没列的最大长度作为固定长度,这样你填补空格都要方便一点呢

#7


该回复于2016-02-17 11:35:02被版主删除

#8


与字节多长无关.
有这么几个问题.
字体,必须找个对齐的字体才行.你写程序的懂我说的吧?
固定个程度,不足的补空格吧...

#9




通过控制字符编码格式可以控制字节数吧!

Java输出字符串对齐问题

#10


神路过。。。 Java输出字符串对齐问题

#11


该回复于2016-02-17 11:37:02被版主删除

#12


learning~

#13


数据分为几段对齐 是这个意思吧
每段取 可能的最大长度
填入数据 不足的地方用空格补足

#14


这是什么里面的?

#15


int length = "“αФ×’—φ".getBytes().length;
根据字符串的字节长度补位

#16


该回复于2016-02-18 17:20:55被管理员删除

#17


这样试下, 列与列之间,用制表符\t分隔。。。

#18


学习学习下。。。。。

#19


还是头一次见拿TXT做交互的。。。。

#20


LZ你遇到的问题应该不是特别复杂吧。
你是思路可能需要换一下,你写的这个例子保证了列与列之间空格数相同了。。没有符合要求额。
你应该按上面几位说的那样思路来:
1.给每列设定一个固定的宽度,保证不小于这列数据的最大长度;同时列与列是等间距。比如A列20字节长度;B列20字节长度;C列20字节长度等等;列与列之间相隔10个字节长度。
2.然后对于每一列,都要判断读取到的数据的长度,strLength,然后再在这列补20-strLength个字节空格。然后再加入10个空格。
3.循环2步骤

#21


需要确认需求 如果是字节一定 就填充字节 如果是字符一定 就填充字符

#22


你看你的数据格式差不多都一样,就第二列和第三列的数据可能影响格式,你自己大致估算一下这两列中最长的字符有多少,然后定一个标准比,不足的用空格补齐就好了