黑马程序员技术交流社区
标题:
切割带汉字的字符串疑惑
[打印本页]
作者:
全超
时间:
2013-3-19 15:23
标题:
切割带汉字的字符串疑惑
本帖最后由 全超 于 2013-3-19 16:37 编辑
class CutDemo
{
public static void main(String[] args)
{
String s = cutString("ab23c嘿嘿acac哈哈",8);//输入字符串 和要获取的字节数
System.out.println(s);
}
public static String cutString(String str,int len)
{
byte[] arr = str.getBytes();
int count = 0;
for(int x = len-1; x>=0; x--)
{
if(arr[x]<0)//知道一个汉字占两个字节,这一步判断是不是负数不太理解?
{
count++;
}
else
break;
}
if(count%2==0)
return new String(arr,0,len);
else
return new String(arr,0,len-1);
}
}
作者:
VOIDMAIN
时间:
2013-3-19 16:16
本帖最后由 VOIDMAIN 于 2013-3-19 16:36 编辑
byte[] arr = str.getBytes();你遍历一下这个arr数组,就知道了字符串转为字节数组的时候,会有很多负数,这个负数就是汉字的字节内容,因为ASSIC编码只有一个字节,汉字占用两个字节,最高位为1,也就是负数,而且为了区分字母,所以每当遇到汉字的时候就会以两个字节的负数表示,
切割汉字我有个方法供参考;
String chinese = "[\u4e00-\u9fa5]"; //汉字的正则表达式
if (st.matches(chinese)) //和自己定义的字符数组进行比较,是汉字的话在利用substring方法切割的时候就多或者少取一个字节(保全汉字);
作者:
全超
时间:
2013-3-19 16:36
VOIDMAIN 发表于 2013-3-19 16:16
byte[] arr = str.getBytes();你遍历一下这个arr数组,就知道了字符串转为字节数组的时候,会有很多负数, ...
懂了。。谢谢指教。。
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2