社区
Java EE
帖子详情
Java输出字符串对齐问题
luman2002
2016-02-04 05:41:34
加精
用户需求是这样,从数据表中读取数据,写到一个TXT接口文件
文件内容中每一列的长度固定(不够的右边补空格),即内容显示每一列都是左对齐的。
但有一个棘手的问题,就是用户的数据里面偶尔包含有特殊字符(比如“αФ×’—φ),会导致错位(如图)。
我的程序中是用utf-8读取字符串的字节数来判断每一列需补多少空格,但是当有这些特殊符号时,它们的字节数都不一样的,所以会导致错位。
在用户需求以及数据内容不能改变的情况下,有什么方法可以解决?
...全文
9275
22
打赏
收藏
Java输出字符串对齐问题
用户需求是这样,从数据表中读取数据,写到一个TXT接口文件 文件内容中每一列的长度固定(不够的右边补空格),即内容显示每一列都是左对齐的。 但有一个棘手的问题,就是用户的数据里面偶尔包含有特殊字符(比如“αФ×’—φ),会导致错位(如图)。 我的程序中是用utf-8读取字符串的字节数来判断每一列需补多少空格,但是当有这些特殊符号时,它们的字节数都不一样的,所以会导致错位。 在用户需求以及数据内容不能改变的情况下,有什么方法可以解决?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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
打赏
举报
回复
与字节多长无关. 有这么几个问题. 字体,必须找个对齐的字体才行.你写程序的懂我说的吧? 固定个程度,不足的补空格吧...
执笔记忆的空白
2016-02-15
打赏
举报
回复
能不能这样想,既然你每一列都是固定长度,那能不能取没列的最大长度作为固定长度,这样你填补空格都要方便一点呢
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
java
字符串整齐输出
说的整齐输出首先想到的是\t,但字符相差过大时\t就会错位。如图所示。
Java
中有个 String.format(),利用这个静态方法可以输出相同长度的字符串。 但发现输出还是对不齐。这是因为汉英符号的宽度、字节数不同等因素造成的,而且不同编码还不一样,所以即便String的length相同,但输出到屏幕也不一定等长。 所有我的方法是同时使用。数字27是试出来的。............
令IDEA控制台打印输出的文本
对齐
以及 实现这个功能时个人的体会
String.format处理中文
对齐
问题
_Super 米的博客-CSDN博客 在控制台打印输出时,抬头和下面toString循环输出的字符串str之间的
对齐
可以靠/t 而str之间 如果是全英文字符串 那么可以使用format指定最小长度进行
对齐
但是如果str中存在中文 由于format不认识中文所以会进行忽略 这就造成了字符串之间的差异 最后就导致format达不到想要的效果 此时直观表现就是导致后面跟着的其他数据无法
对齐
要解决这个办法就需要使用工具类,对于存在中文的字符串进行
汉字和英文字符
对齐
package org.example.basic; public class Test3 { public static void main(String[] args) { info(1, "rtert书rterrterrterrtererterterrterr", 33.3f); info(22, "r书编te编书r", 45.5f); info(10000000, "哈f书编书编书编书书编书编编tererter", 20.3f); .
题目 1569: [蓝桥杯][算法提高VIP]输入输出格式练习
时间限制: 1Sec 内存限制: 128MB 题目描述:(原题链接) 按格式格式读入一个3位的整数、一个实数、一个字符 。 并按格式输出 一个整数占8位左
对齐
、一个实数占8位右
对齐
、一个字符 ,并用|隔开。 输入: 无 样例输入: 123456.789|a 输出: 无 样例输出 : 123 | 456.8|a 解题思路: 字符串解析 注意事项: 无 参考代码: import
java
.util.Scanner; public class Main {
java
对齐
_
Java
字符串
对齐
问题
publicclassStringFormatTest{publicstaticvoidmain(Stringargs[]){Strings="北京";Stringss="北zon北keyuan";Stringsss="dddddd";Stringformat0=String.format("%1$-30.20s*%2$10d*",s,100);Strin...
Java EE
67,535
社区成员
225,852
社区内容
发帖
与我相关
我的任务
Java EE
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
复制链接
扫一扫
分享
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章