Java输出字符串对齐问题

luman2002 2016-02-04 05:41:34
加精
用户需求是这样,从数据表中读取数据,写到一个TXT接口文件
文件内容中每一列的长度固定(不够的右边补空格),即内容显示每一列都是左对齐的。
但有一个棘手的问题,就是用户的数据里面偶尔包含有特殊字符(比如“αФ×’—φ),会导致错位(如图)。
我的程序中是用utf-8读取字符串的字节数来判断每一列需补多少空格,但是当有这些特殊符号时,它们的字节数都不一样的,所以会导致错位。
在用户需求以及数据内容不能改变的情况下,有什么方法可以解决?
...全文
9103 22 打赏 收藏 转发到动态 举报
写回复
用AI写文章
22 条回复
切换为时间正序
请发表友善的回复…
发表回复
qq_38386401 2017-08-03
  • 打赏
  • 举报
回复
你看你的数据格式差不多都一样,就第二列和第三列的数据可能影响格式,你自己大致估算一下这两列中最长的字符有多少,然后定一个标准比,不足的用空格补齐就好了
青年卫大师 2017-08-02
  • 打赏
  • 举报
回复
需要确认需求 如果是字节一定 就填充字节 如果是字符一定 就填充字符
nolan4954 2016-02-22
  • 打赏
  • 举报
回复
LZ你遇到的问题应该不是特别复杂吧。 你是思路可能需要换一下,你写的这个例子保证了列与列之间空格数相同了。。没有符合要求额。 你应该按上面几位说的那样思路来: 1.给每列设定一个固定的宽度,保证不小于这列数据的最大长度;同时列与列是等间距。比如A列20字节长度;B列20字节长度;C列20字节长度等等;列与列之间相隔10个字节长度。 2.然后对于每一列,都要判断读取到的数据的长度,strLength,然后再在这列补20-strLength个字节空格。然后再加入10个空格。 3.循环2步骤
banditgao 2016-02-19
  • 打赏
  • 举报
回复
还是头一次见拿TXT做交互的。。。。
xiaojidenanren2 2016-02-18
  • 打赏
  • 举报
回复
int length = "“αФ×’—φ".getBytes().length; 根据字符串的字节长度补位
爱编程的jc 2016-02-18
  • 打赏
  • 举报
回复
学习学习下。。。。。
diquren 2016-02-18
  • 打赏
  • 举报
回复
这样试下, 列与列之间,用制表符\t分隔。。。
qq_34004663 2016-02-17
  • 打赏
  • 举报
回复
这是什么里面的?
cattpon 2016-02-17
  • 打赏
  • 举报
回复
learning~
qq_21992489 2016-02-17
  • 打赏
  • 举报
回复
数据分为几段对齐 是这个意思吧
每段取 可能的最大长度
填入数据 不足的地方用空格补足
koonise 2016-02-16
  • 打赏
  • 举报
回复
神路过。。。
心随自在飞 2016-02-16
  • 打赏
  • 举报
回复
通过控制字符编码格式可以控制字节数吧!
码之魂 2016-02-16
  • 打赏
  • 举报
回复
与字节多长无关. 有这么几个问题. 字体,必须找个对齐的字体才行.你写程序的懂我说的吧? 固定个程度,不足的补空格吧...
  • 打赏
  • 举报
回复
能不能这样想,既然你每一列都是固定长度,那能不能取没列的最大长度作为固定长度,这样你填补空格都要方便一点呢
luman2002 2016-02-05
  • 打赏
  • 举报
回复
Txt接口是跟用户第三方系统交互用的,不能改变格式
yyfhz 2016-02-05
  • 打赏
  • 举报
回复
问题是你的文本编辑器不是根据UTF8字节的长度来显示每个字符的占位空间的。 此外即便你现在手工把它调准了,如果换一种编辑器(如Word)打开的话,可能又会由于字体不一致而导致再次对不齐。 所以呢,LZ需要以用户真正用来打开文件的编辑器(或者解析程序)的规则为基准来判别每个字符的长度并汇总成字符串的长度-- 也就是说,自己写一个Length()方法,为不同字符认定不同长度。
oh_Maxy 2016-02-05
  • 打赏
  • 举报
回复
引用 1 楼 a394149398 的回复:
可以导出到excel
引用 2 楼 luman2002 的回复:
Txt接口是跟用户第三方系统交互用的,不能改变格式
这里可能要明确下“每一列的长度固定”中,长度的含义。 是指字节个数呢,还是普通的字符串长度? 如果是字节个数,则所有字符串都转字节,再取字节数组length。 如果是字符串长度,直接取字符串length()。
叮当你去哪了 2016-02-04
  • 打赏
  • 举报
回复
可以导出到excel

67,513

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧