截取字符串,含有汉字和字母,不能截半个汉字

时间:2023-01-12 11:09:55
/**
* 2017年6月19日
*
* 问题描述:
* 编写一个截取字符串的函数,输入为一个字符串和字节数,
* 输出为按字节截取的字符串。但是要保证汉字不被截半个,
* 如"我ABC"4,应该截为"我AB",
* 输入"我ABC汉DEF",6,应该输出为"我ABC"而不是"我ABC+汉的半个"。
*
* 问题考察:
* 1.字符串长度(字符数)与字节数的区别
* 2.英文只占一个字节,中文占两个字节或者3个字节
*/
public class TestCut {

public static void main(String[] args) {
String str="我ABC汉DEF";
str=cutString(str,6);
System.out.println("截取的字符串:"+str);
}

//通过字节数截取字符串
private static String cutString(String str, int i) {
String tempStr=null;
StringBuilder resultStr=new StringBuilder();
int len=0;
int sum=0;
for(int j=0;j<str.length();j++){
tempStr=String.valueOf(str.charAt(j));
len=tempStr.getBytes().length;
//判断是否是汉字
if(len>1){
sum=sum+len;
//判断字节数是否已越界
if(sum<=i){
resultStr.append(tempStr);
}else{
break;
}
}else{
sum=sum+1;
if(sum<=i){
resultStr.append(tempStr);
}else{
break;
}
}
}
return resultStr.toString();
}

}


解决思路:1.通过字节数来判断是否中文(正如我上面使用的)

                2.中文的ASCII码是负数


面试的时候遇到这道题、居然不知道怎么做。可能前一段时间都在搞三大框架还有其他技术,却丢了Java基础,结果面试处处碰壁。

基础的东西很重要~ 慎记

2017-6-19