按字节截取含有中文汉字的字符串的子串:给定字符串与(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
简述:
利用了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
相关文章推荐
- 输入字符串和字节数,截取子串(串中含有中文字符)
- 按字节截取含有中文汉字的字符串
- 按字节截取含有中文汉字的字符串
- 按字节截取含有中文汉字的字符串
- C#、Java实现按字节截取字符串包含中文汉字和英文字符数字标点符号等
- 给定一个字符串,包含中文字符和英文字符,取给定大小字节的子串。
- 给定一个字符串,包含中文字符和英文字符,取给定大小字节的子串。
- 从给定字符串中截取n个字节的字符(解决汉字截取乱码问题)
- 从一个包含汉字和其他字符的字符串中截取指定字节长度的字符串,不可以出现中文乱码
- 编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串。 但是要保证汉字不被截半个,如“我ABC”4,应该截为“我AB”,输入“我ABC汉DEF”,6,应该输出为“我ABC”而不
- 按字节截取带有中文字符的字符串
- 截取字符串,汉字占两个字节,字母占一个字节
- C# 汉字的字符串截取指定字节的长度
- java按字节截取带有汉字的字符串的解法
- 编一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串,要保证汉字不被截取半个,如“我ABC”,4,应该截取“我AB”,输入“我ABC汉DEF”,6,应该输出“我ABC”,
- 截取字符串,汉字占两个字节,字母占一个字节
- 编程:编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串。 但是要保证汉字不被截半个,如“我ABC”4,应该截为“我AB”,输入“我ABC汉DEF”,6,应该输出为“我ABC
- java截取含有汉字的字符串
- java按字节截取带有汉字的字符串的解法