Java学习之IO(编码练习--截取字符串根据字节)
1 public static void main(String[] args) throws IOException { 2 String str="ab你好cd谢谢"; 3 int len =str.getBytes("gbk").length; 4 for(int i=0;i<len;i++) { 5 System.out.println("GBK截取"+(i+1)+"个字节结果是:"+cutStringByBytes(str,i+1)); 6 } 7 8 len =str.getBytes("UTF-8").length; 9 for(int i=0;i<len;i++) { 10 System.out.println("UTF截取"+(i+1)+"个字节结果是:"+cutStringByUTFBytes(str,i+1)); 11 } 12 } 13 14 /** 15 * 思想:UTF-8编码,中文是三个字节表示,英文是一个字节 16 * 并且中文字中有第一个字节码是小于零的 17 * 97,98,-28,-67,-96,-27,-91,-67,99,100,-24,-80,-94,-24,-80,-94 18 * 根据截取位置向前计数,查看计数除3取余,为零:不舍,为1:舍1位,为21:舍2位 19 * @param str 20 * @param len 21 * @return 22 * @throws IOException 23 */ 24 private static String cutStringByUTFBytes(String str, int len) throws IOException { 25 byte[] buf=str.getBytes("UTF-8"); 26 int count=0; 27 for(int i=len-1;i>=0;i--) { 28 if(buf[i]<0) 29 count++; 30 else { 31 break; 32 } 33 } 34 if(count%3==0) 35 return new String(buf,0,len,"UTF-8"); 36 else if(count%3==1) 37 return new String(buf,0,len-1,"UTF-8"); 38 else 39 return new String(buf,0,len-2,"UTF-8"); 40 41 } 42 43 /** 44 * 思想:gbk编码,中文是两个字节表示,英文是一个字节 45 * 并且中文字中有第一个字节码是小于零的 46 * 97,98,-60,-29,-70,-61,99,100,-48,-69,-48,-69 47 * 根据截取位置向前计数,查看计数的奇偶数,奇数舍弃,偶数保留 48 * @param str 49 * @param len 50 * @return 51 * @throws IOException 52 */ 53 private static String cutStringByBytes(String str, int len) throws IOException { 54 byte[] buf=str.getBytes("gbk"); 55 int count=0; 56 for(int i=len-1;i>=0;i--) { 57 if(buf[i]<0) 58 count++; 59 else { 60 break; 61 } 62 } 63 if(count%2==0) 64 return new String(buf,0,len,"gbk"); 65 else 66 return new String(buf,0,len-1,"gbk"); 67 }
分类:
JAVA
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律
2018-01-03 URL重写
2018-01-03 webConfig中System.Web 和 System.WebServer节点读取