Java 测试,按字节数截取字符串,不能输出半个中文

工作内容:

测试

测试分享:

测试过程中还是发现了很多问题,比如流的方法不熟,代码程序的思路需一步一步写出来,这样在写程序过程中才不容易出错,事实上需理清思路再写。

测试题分享:

1.编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节数截取的字符串,但是要保证汉子不被截半个,如:“我AB”,输入“我ABC汉子DEF”应该输出为“我ABC”而不是“我ABC”+汉的一半。

//方法适合于字符街GBK

static String Cut(String str, int num) {
StringBuffer sb = new StringBuffer();
char[] ch = str.toCharArray();
stop: for (char c : ch) {
if (c <= 255 && (num - 1) >= 0) {
sb.append(c);
num--;
} else if (c > 255 && ((num - 2) >= 0)) {
num -= 2;
sb.append(c);
} else
break stop;
}
return sb.toString();
}

//方法适合于UTF-8

String string = "萨达hui耶和华das旦好家伙";
System.out.println(string);
byte [] b = string.getBytes();//获取字符串的byte数组
String newString = null;
int index = 0;//接收英文相对当前位置出现的位置
while (true) {
//输入字节截取长度
int len = input.nextInt();
//长度过大继续输入
if(len>b.length){
System.out.println("输入长度过大!");
continue;
}
//只处理长度大于3的字节截取长度
if(len>=3){
/**
* UTF-8//中文字符=3个字节
* 1.遍历当前位置之前的一个英文字母的位置index
* 如果没找到英文字母,直接用len%3
* 2.(len-index)%3得到当前位置相对于本中文文字所占字节的位置
* 3.得到新的字符串
*/
if(b[len]<0){
//找到当前位置之前的可输除字节的位置,并把位置给index
for(int x=len;x>0;x--){
if(b[x]>=0){
index = x;
break;
}
}
//如果没找到,则当前中文字符之前都是中文字符,取余数得到当前位置相对当前字符所占字节的位置
//如果找到,则把相对位置取余3,....
if(index == 0){
index = len%2;
}else{
index = index%2;
}
//处理得到相对位置后输出的长度
if(index == 1){
len=len-1;
}
if(index == 2){
len=len-2;
}
}
}else{
System.out.println("请输入截adsa取长度大于3");
continue;
}
newString = new String(b, 0, len);
System.out.println(newString);
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值