java控制文字间隔距离 指定长度为12 不足 则 右侧拼空格 Java 字符串长度不足左右补0 java 指定字符串长度,不足则右侧添加空格

//  指定长度为12 不足 则 右侧拼空格
//        String.format("%-12s", "qqq")


 String str = "123"
 String s = String.format("%06d", str);  //s="000123"
 %06d的定义:
 0代表前面要补的字符
 6代表字符串长度
 d表示参数为整数类型

https://blog.csdn.net/qq_33547169/article/details/98737210

// 指定长度为12 不足 则 右侧拼空格

String.format("%-12s", "qqq")

英文字符串 处理
//  指定长度为12 不足 则 右侧拼空格
String.format("%-12s", "qqq")
中文字符串处理
中文字符串在一定的情况下是可以使用上述的英文字符串处理方式处理,但是在某些情况下就不行,例子如下
当要处理多个中文字符串时,切中文字符串的长度都是一样的 如下
System.out.println(String.format("%-12s", "中华") + "|");
System.out.println(String.format("%-12s", "人民") + "|");
System.out.println(String.format("%-12s", "共和") + "|");
// 运行结果 ( | 结束符 方便看)
/**
 * 中华          |
 * 人民          |
 * 共和          |
 */
当长度不一样时 如下:(会看到明显的不同)
System.out.println(String.format("%-12s", "中华") + "|");
System.out.println(String.format("%-12s", "人民") + "|");
System.out.println(String.format("%-12s", "共和国") + "|");
/**
 * 中华          |
 * 人民          |
 * 共和国         |
 */

在这篇博客中找到了解决方案 <<JAVA中文编码和中文字符长度问题和解决方案>>整理如下

/**
 * 设置字符长度  不足者 右侧添加 指定字符
 * @param str1 元字符
 * @param lenth 指定长度
 * @param st2 指定字符
 * @return
 * @throws Exception
 */
public static String strAppendStr(String str1, int lenth, String st2) throws Exception {
StringBuilder strb1 = new StringBuilder(str1);
lenth = lenth - getChineseLength(str1, "utf-8");
while (lenth >= 0) {
lenth--;
strb1.append(st2);
}
return strb1.toString();
}
/**
 * 计算中文字符长度
 * @param name 字符
 * @param endcoding 编码方式
 * @return
 * @throws Exception
 */
public static int getChineseLength(String name, String endcoding) throws Exception {
int len = 0; //定义返回的字符串长度
int j = 0;
//按照指定编码得到byte[]
byte[] b_name = name.getBytes(endcoding);
do {
short tmpst = (short) (b_name[j] & 0xF0);
if (tmpst >= 0xB0) {
if (tmpst < 0xC0) {
j += 2;
len += 2;
} else if ((tmpst == 0xC0) || (tmpst == 0xD0)) {
j += 2;
len += 2;
} else if (tmpst == 0xE0) {
j += 3;
len += 2;
} else {
short tmpst0 = (short) (((short) b_name[j]) & 0x0F);
if (tmpst0 == 0) {
j += 4;
len += 2;
} else if (tmpst0 < 12) {
j += 5;
len += 2;
} else {
j += 6;
len += 2;
}
}
} else {
j += 1;
len += 1;
}
} while (j <= b_name.length - 1);
return len;
}
测试
System.out.println(strAppendStr("中华人民",24,"-")+"|");
System.out.println(strAppendStr("共和国",24,"-")+"|");
中华人民-----------------|
共和国-------------------|

控制台中看度如图 还是有稍微的偏差 不知道什么问题 但是事实是已经对齐了

文章知识点与官方知识档案匹配,可进一步学习相关知识

————————————————

版权声明:本文为CSDN博主「菜鸟阿达」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/qq_33547169/article/details/98737210

https://blog.csdn.net/qq_40618664/article/details/121743430

后端Java

专栏收录该内容

58 篇文章0 订阅

订阅专栏

今天遇到一个简单的业务,用户注册会员ID最短五位,不足补零,不能重复。不能重复意味着用户只能有99999个,超过就会重复,于是就加了八位的需求,但是不超过99999前只能用五位,超过了的按需求增加位数,该如何实现?

public static void main(String[] args) {
        Long i = 12345678l;
        NumberFormat nf = NumberFormat.getInstance();
        //设置是否使用分组
        nf.setGroupingUsed(false);
        //设置最大整数位数
        nf.setMaximumIntegerDigits(8);
        //设置最小整数位数
        nf.setMinimumIntegerDigits(5);
        System.out.println(nf.format(i));
    }

这样就不到五位的会补齐五位,超过五位就显示对应的ID

https://blog.csdn.net/asd051377305/article/details/126033225

import org.apache.commons.lang3.StringUtils;
 
 
 
StringUtils.leftPad(String str, int size, String padStr);
 
例子:
 
StringUtils.leftPad("123", 6, "0")  ==>  000123
StringUtils.leftPad("123456", 6, "0")  ==>  123456

String str = "123"
String s = String.format("%06d", str);  //s="000123"
 
 
%06d的定义:
0代表前面要补的字符
6代表字符串长度
d表示参数为整数类型

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值