判断一个字符是双字节还是单字节

对于字符串的处理,经常会遇到需要判断字符是双字节还是单字节(或者全角和半角)的情况,因为双字节字符和单字节字符在屏幕上所占用的空间是不同的,通常情况下双字节字符占用的空间是单字节字符的两倍。比如,一个字符串,可能包含中文英文数字和各种符号等等,将其输出到屏幕上,需要根据长度判断在哪里进行截断(网页编程中经常用到)。
最常见的两种方式。
一种是通过String的getBytes().length来判断,单个字符构成的字符串,其getBytes().length若大于1,则为双字节字符,否则为单字节字符。不过需要注意的是,这种方式有一定缺陷,就是当使用英文操作系统来执行getBytes().length这句代码的时候,单字节双字节文本得到的结果是一样的。这是因为不同的JAVA虚拟机对于字符的处理方式不同。所以,虽然这种方法很简单,而且在大多数时候很有效,但是考虑到可能会有少部分使用英文操作系统的人,还是建议用下一种方法。
另外一种是通过判断某一位的字符是否大于0x80,如果大于则为双字节字符,否则为单字节字符。



/**编程:编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串。
* 但是要保证汉字不被截半个,如"我ABC"4,应该截为"我AB",输入"我ABC汉DEF",6,
* 应该输出为"我ABC"而不是"我ABC+汉的半个"
* @param str
* @param byteLength
* @return
*/
private static String getStringByInputStringAndLength(String str,int byteLength)
{
// int byteCount = 0;//字节计数
// int charCount = 0;//字符计数
// for(int i=0;i<byteLength;i++)
// {
// charCount++;
// String strTemp = String.valueOf(str.charAt(i));
// int currentByteNum = strTemp.getBytes().length;
// if(currentByteNum==2)
// {
// byteCount+=2;
// }
// else if(currentByteNum==1)
// {
// byteCount+=1;
// }
// if(byteCount>byteLength)
// {
// charCount--;
// break;
// }
// }
// System.out.println("num:"+charCount);
// return str.substring(0, charCount);

int byteCount = 0;//字节计数
int charCount = 0;//字符计数
for(int i=0;i<byteLength;i++)
{
charCount++;
int charIndex = (int)str.charAt(i);
System.out.println("charIndex:"+charIndex);
// int currentByteNum = strTemp.getBytes().length;
if(charIndex > 128)
{
byteCount+=2;
}
else
{
byteCount+=1;
}
if(byteCount>byteLength)
{
charCount--;
break;
}
}
System.out.println("num:"+charCount);
return str.substring(0, charCount);
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值