/*编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串。
* 但是要保证汉字不被截半个,半个汉字应舍弃,如输入“我ABC汉DEF”,6,
* 应该输出为“我ABC”而不是“我ABC+汉的半个”。
*/
之前大家的做法都是将字符串转成字节数组再进行遍历并截取,我尝试了另外一种做法就是将字符串转成字符数组进行遍历,每遍历到一个中文就将代表截取长度的变量减一。判断遍历到的字符是不是两个字节采用的方法是字符的int值大于255。很巧妙吧?
import java.util.Arrays;
public class Test10 {
public static void main(String[] args) {
String str = "我ABC汉DEF";
//调用方法打印截取后的字符串。
System.out.println(cutString(str,6));
}
public static String cutString(String str,int x){
//将字符串转成字符数组。
char[] chs = str.toCharArray();
StringBuilder sb = new StringBuilder();
//遍历字符数组并将其转存到另一个符合截取长度的新字符数组。
for(int i = 0;i < x;i ++){
//当遍历的字符为汉字时,x减1,即截取长度减一
if (chs[i] > 256 ){
x--;
}
}
//将修改后长度的字符数组逐个添加到可变字符序列中
for(int i = 0;i < x;i ++){
sb.append(chs[i]);
}
//将截取后的可变字符序列转成字符串返回。
return sb.toString();
}
}