java截取中英文混合字符串 等宽显示


import java.io.UnsupportedEncodingException;

public class StringUtil {

public static String subString(String text, int length, String endWith) {
int textLength = text.length();
int byteLength = 0;
StringBuffer returnStr = new StringBuffer();
for(int i = 0; i<textLength && byteLength < length*2; i++){
String str_i = text.substring(i, i+1);
if(str_i.getBytes().length == 1){//英文
byteLength++;
}else{//中文
byteLength += 2 ;
}
returnStr.append(str_i);
}
try {
if(byteLength<text.getBytes("GBK").length){//getBytes("GBK")每个汉字长2,getBytes("UTF-8")每个汉字长度为3
returnStr.append(endWith);
}
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return returnStr.toString();
}

测试:

public static void main(String[] args) {

String text = "。发.。篇>所q阿s似hf的f**发千万s";
for(int i = 0; i< text.length();i++){
String s = StringUtil.subString(text,i+1,"...");
System.out.println(s+"--------------------------"+(i+1));
}

}

结果:

。...--------------------------1
。发...--------------------------2
。发.。...--------------------------3
。发.。篇...--------------------------4
。发.。篇>...--------------------------5
。发.。篇>所...--------------------------6
。发.。篇>所q阿...--------------------------7
。发.。篇>所q阿s...--------------------------8
。发.。篇>所q阿s似...--------------------------9
。发.。篇>所q阿s似hf...--------------------------10
。发.。篇>所q阿s似hf的...--------------------------11
。发.。篇>所q阿s似hf的f*...--------------------------12
。发.。篇>所q阿s似hf的f**...--------------------------13
。发.。篇>所q阿s似hf的f**发...--------------------------14
。发.。篇>所q阿s似hf的f**发千...--------------------------15
。发.。篇>所q阿s似hf的f**发千万...--------------------------16
。发.。篇>所q阿s似hf的f**发千万s--------------------------17
。发.。篇>所q阿s似hf的f**发千万s--------------------------18
。发.。篇>所q阿s似hf的f**发千万s--------------------------19
。发.。篇>所q阿s似hf的f**发千万s--------------------------20
。发.。篇>所q阿s似hf的f**发千万s--------------------------21


结果分析:
当截取后的字符串里面有奇数个英文字符,且最后一个是中文字符,这时会多出半个汉字长度
当截取后的字符串里面有偶数个英文字符,且最后一个是英文字符,这时会少出半个汉字长度

这是正常的
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值