IO练习--按字节截取字符串
来源:互联网 发布:java 等待1秒 编辑:程序博客网 时间:2024/05/22 06:37
* 在Java中字符串“abcd”和字符串“ab你好”都是4个字符,
* 但是字节数不同,因为GBK中一个汉字占两个字节
* 定义一个方法用来按字节数截取字符串。
* 如:对于“ab你好”,取3个字节,“你”的字节只取了一半,无法正确显示,所以就把那个字节舍去
* 若取4个字节就是“ab你”,取5个字节还是“ab你”
* 但是字节数不同,因为GBK中一个汉字占两个字节
* 定义一个方法用来按字节数截取字符串。
* 如:对于“ab你好”,取3个字节,“你”的字节只取了一半,无法正确显示,所以就把那个字节舍去
* 若取4个字节就是“ab你”,取5个字节还是“ab你”
1 public class Test { 2 3 public static void main(String[] args) throws UnsupportedEncodingException { 4 String str=new String("ab你好w琲天"); 5 int len=str.getBytes("gbk").length; 6 for(int x=1;x<=len;x++){ 7 System.out.println("GBK编码,截取"+x+"个字节数的结果是"+cutStringByBytes(str, x)); 8 } 9 10 int len2=str.getBytes("utf-8").length;11 for(int x=1;x<=len2;x++){12 System.out.println("utf-8编码,截取"+x+"个字节数的结果是"+cutStringU8StringByBytes(str, x));13 }14 15 }16 //对于utf-8编码,一个汉字三个字节,用int表示都是负数17 public static String cutStringU8StringByBytes(String str, int len) throws UnsupportedEncodingException {18 byte[] buf=str.getBytes("utf-8");19 int count=0;20 for(int i=len-1;i>=0;i--){21 if(buf[i]<0)22 count++;23 else 24 break;25 }26 if(count%3==0){27 return new String(buf,0,len,"utf-8");28 }29 else if(count%3==1)30 return new String(buf,0,len-1,"utf-8");31 else32 return new String(buf,0,len-2,"utf-8");33 }34 35 //对于GBK编码,汉字的编码大部分是两个负数(因为高位字节是1),其他是一个负数一个正数(比如“琲”)36 public static String cutStringByBytes(String str, int len) throws UnsupportedEncodingException {37 byte[] buf=str.getBytes("gbk");38 int count=0;39 for(int i=len-1;i>=0;i--){40 if(buf[i]<0)41 count++;42 else 43 break;44 }45 if(count%2==0){46 return new String(buf,0,len,"gbk");47 }48 else49 return new String(buf,0,len-1,"gbk");50 }51 }
对于字符串“ab你好w琲天”的测试结果如下:
1 GBK编码,截取1个字节数的结果是a 2 GBK编码,截取2个字节数的结果是ab 3 GBK编码,截取3个字节数的结果是ab 4 GBK编码,截取4个字节数的结果是ab你 5 GBK编码,截取5个字节数的结果是ab你 6 GBK编码,截取6个字节数的结果是ab你好 7 GBK编码,截取7个字节数的结果是ab你好w 8 GBK编码,截取8个字节数的结果是ab你好w 9 GBK编码,截取9个字节数的结果是ab你好w琲10 GBK编码,截取10个字节数的结果是ab你好w琲11 GBK编码,截取11个字节数的结果是ab你好w琲天12 13 utf-8编码,截取1个字节数的结果是a14 utf-8编码,截取2个字节数的结果是ab15 utf-8编码,截取3个字节数的结果是ab16 utf-8编码,截取4个字节数的结果是ab17 utf-8编码,截取5个字节数的结果是ab你18 utf-8编码,截取6个字节数的结果是ab你19 utf-8编码,截取7个字节数的结果是ab你20 utf-8编码,截取8个字节数的结果是ab你好21 utf-8编码,截取9个字节数的结果是ab你好w22 utf-8编码,截取10个字节数的结果是ab你好w23 utf-8编码,截取11个字节数的结果是ab你好w24 utf-8编码,截取12个字节数的结果是ab你好w琲25 utf-8编码,截取13个字节数的结果是ab你好w琲26 utf-8编码,截取14个字节数的结果是ab你好w琲27 utf-8编码,截取15个字节数的结果是ab你好w琲天
0 0
- IO练习--按字节截取字符串
- 24-IO流-70-IO流(练习-按字节截取字符串)
- 华为机试练习---按字节数截取字符串
- 按字节截取字符串
- 按字节截取字符串
- 按字节截取字符串
- 按字节截取字符串
- 按字节截取字符串
- 按字节截取字符串
- 按字节截取字符串
- C#截取字符串按字节截取SubString
- 按字节长度截取字符串
- 按字节截取字符串-Java
- java按字节截取字符串
- 按字节长度截取字符串
- java按字节截取字符串
- 字符串的按字节截取
- C# 字符串按字节截取
- 利用rmi实现客户端与服务器端通信
- IO包中的其他类总结
- android UI小结(四)
- XML-RPC 示例
- java.util.Date类在使用中应该注意的问题
- IO练习--按字节截取字符串
- 用 pickle 实现简易“跨”Python实现平台的调用
- android UI小结(五)
- 网络编程初探--使用UDP协议的简易聊天室
- String 类常见问题比较
- android UI小结(六)
- MySQL 查询排名
- JPA
- JPA-1 概述与HelloWorld