问题描述:编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串。但是要保证汉字不被截半个,例如“人abc”4,应该截为“人ab”;输入“人abc们”6,应该截为“人abc”,而不是截为“人ab+们的半个”
package com.wyl;
/**
* 截取字符串
* @author wyl
*
*/
public class InterceptStr {
/**
* 判断字符是否为中文
* @param c
* @return
*/
public boolean isChinese(char c){
String sb = String.valueOf(c); //将字字符转化成字符串的形式
return sb.getBytes().length == 1 ? false : true;
}
/**
* 截取字符串
* @param str 字符串
* @param len 要截取的字节数
* @return 截取的字符串
*/
public String interceptStr(String str, int len){
if(len==0 || str==null || str.equals("")){
return "";
}else if(len<0){
System.out.println("参数len输入非法");
}
char[] chars = str.toCharArray(); //将字符串转换成字符数组,中文占用两个字符,英文占用一个字符
StringBuilder sb = new StringBuilder();
int count = 0; //用来截取当前截取的字符串的长度
for(char cc:chars){
if(count < len){
if(isChinese(cc)){
//如果要求截取的字符串长度只差一,但是接下来是中文字符
//则截取子串中不包括这个中文字符
if(count+1 == len){
return sb.toString();
}else{
count = count+2;
sb.append(cc);
}
}else{
count = count+1;
sb.append(cc);
}
}else{
break;
}
}
return sb.toString();
}
public static void main(String[] args) {
InterceptStr interceptStr = new InterceptStr();
String str = "abc王xb亚";
String s = interceptStr.interceptStr(str, -1);
System.out.println(s);
}
}