/**
* 递归截取字符串。(对具有中文和英文的字符串,进行截取,获得其中的中文字符串)
* @author xiaozd
*/
public class ChineseEnglishSubStr {
/**
* 测试用例
* @param args
* 用于测试工具类是否正常
*/
public static void main(String[] args){
String test="lovo四件套test测试test1";
StringBuffer sb = new StringBuffer(test);
System.out.println("测试:----"+sb.substring(0,5).getBytes().length);
//递归获取中英文字符串中中文部分
// int length=sb.length();
// int bytesLength=sb.toString().getBytes().length;
sb=getChinesePart(sb);
System.out.println("sb---"+sb.toString());
}
/**
* 递归截取字符串。(对具有中文和英文的字符串,进行截取,获得其中的中文字符串)
* @author xiaozd
*/
public static StringBuffer getChinesePart(StringBuffer stringBuffer){
stringBuffer=getStringBuffer(stringBuffer);
if(stringBuffer.toString().getBytes().length==2*stringBuffer.length()){
System.out.println("aaa");
}
else{
stringBuffer=getChinesePart(stringBuffer);
}
return stringBuffer;
}
/**
* 字符串截取时,实际调用的递归方法
* @param stringBuffer
* @return
*/
public static StringBuffer getStringBuffer(StringBuffer stringBuffer){
int start=0;
int end=0;
StringBuffer sb = new StringBuffer("");
for (int i = 0; i < stringBuffer.length(); i++){
//通过字符的bytes长度来确定当前字符是否为中文,中文为2,英文,数字等为1
String s = String.valueOf(stringBuffer.charAt(i));
int len = s.getBytes().length;
if(end==0){
//如果是英文
if(len==1){
end++;
}else{
//如果是中文
start++;
end++;
}
}else{
//如果是英文
if(len==1){
end++;
}
if(len!=1 || i==stringBuffer.length()-1){
//如果是中文
if(start!=end){
sb=new StringBuffer(stringBuffer.delete(start, end));
break;
}
start++;
end++;
if(i==stringBuffer.length()-1){
sb=stringBuffer;
}
}
}
}
return sb;
}
}