昨天去参加中科软的笔试,编程题有一道是关于字符串的,用字节数来截取字符串,如果出现中文被截断了,应该丢去中文的那个字节。如:String a = “中aaa国ccc”;截取6个字节的字符串,即:中aaa+”国”的前一部分。设计一个函数,把截到的中文的那部分去掉。
当时,不会做,自己乱写一通哈。回来后,查找资料,发现可以利用java的编码规则解决。就是,Unicode编码啦!
java代码:
private static String cutStringByBytes(String s,int length) throws UnsupportedEncodingException{
byte[] bytes = s.getBytes("unicode");
int n = 0; // 当前的字节数
int i = 2; // 要截取的字节数,bytes数字的前面两位是标志位
while(n < length)
{
if (bytes[i] != 0)
{
n++;
}
i++;
}
// 如果i为奇数
if (i % 2 == 1)
{
i = i - 1;
}
return new String(bytes, 0, i, "unicode");
}