您的位置:首页 > 其它

按字节截取含有中文汉字的字符串的子串:给定字符串与(beginIndex , endIndex)

2018-03-28 18:11 281 查看
根据(beginIndex , endIndex)截取规则如下:



简述:
利用了toCharArray()方法将字符串转换为字符数组。
利用了GBK编码,即单个汉字字节长度为2,单个字母字节长度为1
利用getBytes方法获得单个字符的字节长度。
详见API文档String类:点击打开链接
代码:import java.io.UnsupportedEncodingException;

public class MyString{

public static String mySubString(int beginIndex , int endIndex , String str) throws UnsupportedEncodingException{

String subStr = "";

//把字符串存入字符数组里
char[] cStr = str.toCharArray();

/*遍历字符数组的每个字符,得到前i个字符的总字节数
找到按字符开始截取的位置与结束截取的位置
如果截到了半个汉字则丢弃,前后一样。*/

int l1 = 0;
int l2 = 0;
int i1 = 0;//按字符开始截取的位置
int i2 = 0;//按字符结束截取的位置

//判断开始截取的位置
//beginIndex为零的时候是特殊情况,直接令i1=0
if(beginIndex == 0){
i1=0;
}
else{
for(int i = 0 ; i < cStr.length ; i++){
l1 += String.valueOf(cStr[i]).getBytes("GBK").length;
//一旦前i个字符的总字节数大于或等于beginIndex,则截取的位置为i+1
if(l1 >= beginIndex){
i1 = i + 1;
break;
}
}
}

//判断结束截取的位置
for(int i = 0 ; i < cStr.length ; i++){
l2 += String.valueOf(cStr[i]).getBytes("GBK").length;
//当前i个字符的总字节数等于endIndex,则截取到第i个字符
if(l2 == endIndex){
i2 = i;
break;
}
//当前i个字符的总字节数大于endIndex,则截取到第i-1个字符
else if(l2 > endIndex){
i2 = i-1;
break;
}
}

//判断是否恰好没有截取任何字符。例如“中国ab”截取(1,2)此时i1>i2
if(i1>i2){
return "截取失败!";
}
else{
for(int i = i1 ; i<i2+1 ; i++){
subStr += cStr[i];
}
return subStr;
}
}

public static void main(String[] args)throws UnsupportedEncodingException{
String a = "ch中国ina";
System.out.println(MyString.mySubString(0,8,a));
System.out.println(MyString.mySubString(1,3,a));
System.out.println(MyString.mySubString(2,8,a));
System.out.println(MyString.mySubString(1,2,a));

}
}嘿嘿嘿,小白学习过程1.0
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐