转换gbk所占用字节长度以及是否为中文
简单看一下在java中各个类型字符串转换gbk所占用的字节,有时可能会使用字节所占用长度来进行一些判断,希望能有所帮助。废话不说,上码:
String data = "ABCDEFG-啊吧吃的额发个(1)";//随便定义一个字符串,方便下边看结果,包含字符、字母和汉字
String eng = "A";
String ch = "啊";
String zifu = "-";
String shuzi = "1";
byte[] bytes;
try {
bytes = data.getBytes("gbk");//转换后中文两个字符,英文以及符号都是一个字符。
//可以在这里看一下转换前后的字符长度
System.out.println("转换前字符长度:"+data.length());
System.out.println("转换后字符长度:"+bytes.length);
/**
* 转换前字符长度:18
* 转换后字符长度:25
*/
//分别看一下汉字、英文、数字以及字符的长度变化
System.out.println("英文转换前的字符长度:"+ eng.length());
System.out.println("汉字转换前的字符长度:"+ ch.length());
System.out.println("字符转换前的字符长度:"+ zifu.length());
System.out.println("数字转换前的字符长度:"+ shuzi.length());
System.out.println("英文转换后的字符长度:"+ eng.getBytes("gbk").length);
System.out.println("汉字转换后的字符长度:"+ ch.getBytes("gbk").length);
System.out.println("字符转换后的字符长度:"+ zifu.getBytes("gbk").length);
System.out.println("数字转换后的字符长度:"+ shuzi.getBytes("gbk").length);
/**
* 英文转换前的字符长度:1
* 汉字转换前的字符长度:1
* 字符转换前的字符长度:1
* 数字转换前的字符长度:1
* 英文转换后的字符长度:1
* 汉字转换后的字符长度:2
* 字符转换后的字符长度:1
* 数字转换后的字符长度:1
*/
//判断转换后指定字符是否为汉字 这里用英文和汉字举例
if(bytes[0] >=0 && bytes[0] <= 127){
System.out.println("输出结果为:"+bytes[0]);
} else {
System.out.println("该值是汉字,转换后的字符为:"+bytes[0]);
}
/**
* 输出结果为: 65
*/
if(bytes[8] >=0 && bytes[8] <= 127){
System.out.println("输出结果为:"+bytes[8]);
} else {
System.out.println("该值是汉字,转换后的字符为:"+bytes[8]);
}
/**
* 该值是汉字,转换后的字符为:-80
*/
//对于这个字节截取字符的方法
String newData = new String(bytes,0,7,"gbk");
System.out.println(newData);
//输出结果为:ABCDEFG
//如果需要截取中文,可以截取后使用正则验证一下是否是汉字,
//如果不是前一位截取或者后一位截取就看大家的想法啦,如果想不通可以m我
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}