这里关键就是汉字出现半个的那种情况不好弄。我是这么做的,我是对一个字符串进行遍历,每个字符得到他的字节数,并且每遍历一个字符就经所有便利过的字符的字节数进行累计,最后将在两种可能的情况下退出遍历。这两种情况是字节数刚好等于需要截取的字节数或者等于需要截取的字节数+1;根据这两种情况来截取字符串并退出遍历就可以了。我是这样做的。
public class Test10 {
public static void main(String[] args) {
System.out.println("请输入字符串和所需截取的字节数");
//从键盘上输入
Scanner zifuchuan = new Scanner(System.in);
String str = zifuchuan.nextLine();
Scanner zijieshu = new Scanner(System.in);
int no = zijieshu.nextInt();
System.out.println(str + ":::::" + no);
isHanzi(str, no);
}
public static void isHanzi(String s, int length) {
int c = 0;
int count1=0; //count1用来存储读取的汉字的总字节数
int count2=0; //count2用来存储读取的其他字符的总字节数
int num=0; //num表示所有字符的总字节数
int i = 0; //i用来存储字符的个数
StringBuffer sb=new StringBuffer();
for ( ; i < s.length(); i++) {
char r= s.charAt(i);
c = (int)r;
//是汉字的时候
if (c <= 0 || c >= 126) {
char value = (char) c;
System.out.println(value);
count1+=2;
sb.append(r);
}
//不是汉字的时候
else{
count2++;
sb.append(r);
}
num=count1+count2;
System.out.println(num);
//最后一个字符不是汉字的时候 输出的
if(num==length){
System.out.println(sb);
return;
}
//最后一个字符是汉字的时候 输出的
else if(num==(length+1)){
String str=sb.substring(0, i);
System.out.println(str);
return;
}
}
}
}
|