Java按字节截取字符串(GBK编码、UTF-8编码实现)
2016-03-23 21:09
696 查看
package FileDemo; import java.io.IOException; public class CutStringTest { /** * @param args * @throws IOException */ public static void main(String[] args) throws IOException { String str = "ab你好cd谢谢"; /*byte buf[]=str.getBytes("GBK"); for(byte ch:buf){ System.out.println(Integer.toBinaryString(ch)); }*/ int len = str.getBytes("gbk").length; for (int x = 0; x < len; x++) { System.out.println("截取" + (x + 1) + "字节结果时:" + cutStringByByte(str, x + 1)); } String str1 = "ab你好cd杮"; int len1 = str.getBytes("gbk").length; for (int x = 0; x < len1; x++) { System.out.println("截取" + (x + 1) + "字节结果时:" + cutStringByU8(str1, x + 1)); } } // 使用UTF-8编码表进行截取字符串,一个汉字对应三个负数,一个英文字符对应一个正数 private static String cutStringByU8(String str, int len) throws IOException { byte[] buf = str.getBytes("utf-8"); int count = 0; for (int x = len - 1; x >= 0; x--) { if (buf[x] < 0) { count++; } else { break; } } if (count % 3 == 0) { return new String(buf, 0, len, "utf-8"); } else if (count % 3 == 1) { return new String(buf, 0, len - 1, "utf-8"); } else { return new String(buf, 0, len - 2, "utf-8"); } } // 使用GBK编码表进行字符串的截取,一个英文字符对应码表一个正数,一个汉字对应两个负数 public static String cutStringByByte(String str, int len) throws IOException { byte[] buf = str.getBytes("gbk"); int count = 0; for (int x = len - 1; x >= 0; x--) { if (buf[x] < 0) { count++; } else { break; } } if (count % 2 == 0) { return new String(buf, 0, len, "gbk"); } else { return new String(buf, 0, len - 1, "gbk"); } } }
相关文章推荐
- 八成Java开发者解答不了的问题
- 转:java 进阶之路
- 【动态规划】字符串最小编辑距离Java实现
- eclipse设置自动换行
- java中equals方法的用法以及==的用法
- 40个Java多线程问题总结
- Struts.xml 中的11种Result-Type类型
- Java对数组对象进行排序
- 哈夫曼树及一种java实现
- Spring的IOC逐层深入——依赖注入的两种实现类型
- Java基础之内部类
- kettle源码
- 父类私有变量是否被子类继承详细解说(答案:内存中存在,但sun公司定义为不继承)
- java学习资源
- 开发高性能JAVA应用程序基础(集合篇)
- java中新起一个线程
- Struts2文件上传与下载
- java set间的相互转换
- ETL工具kettle源码解读-前言
- 为什么做java的web开发我们会使用struts2,springMVC和spring这样的框架?