java:关于字符编码的试题
来源:互联网 发布:仙6steam mac 编辑:程序博客网 时间:2024/05/21 04:22
<pre name="code" class="java">/** 编写函数,从一个字符串中按字节数截取一部分,但不能截取出半个中文(GBK码表) 例如:从“HM程序员”中截取2个字节是“HM”,截取4个则是“HM程”,截取3个字节也要是"HM"而不要出现半个中文<span style="white-space:pre"></span>思路:GBK编码中,一个字母占一个字节,切最高位为0;一个汉字占两个字节,最高位都为为1.*/import java.util.*;class Test10{ public static void main(String[] args) throws Exception { String str = "你好HM程序员"; //c从str中截取前3个字节,并返回字符串 String sub = backString(str, 3); System.out.println(sub); } //取字符创str的前n个字节的字符串 public static String backString(String str, int n) throws Exception { //字符串转换为字节数组 byte[] buf = str.getBytes("GBK"); //存储返回的子串 String sub = null; //记录每个字节的最高位 StringBuilder sb = new StringBuilder(); // for(byte b : buf) { String s = Integer.toBinaryString(b&128); char[] ch = s.toCharArray(); sb.append(ch[0]); } //System.out.println(sb); //第n个字节的最高位 char c = sb.charAt(n-1); //System.out.println(c); //如果第n个字节最高位为0,则返回前n个字节的字符串 if(c == '0') { sub = new String(buf, 0, n, "GBK"); } //如果第n个字节最高位为1,则需要记录前n个字节最高位为1的个数count //count为偶数,则该字节只是一个中文字符的一部分,只需返回前n-1个字节的字符串形式 //count为奇数,则第n-1个字节的最高位必也为1,这两个字节正好形成一个中文字符,返回前n个字节的字符串形式 else { int count = 0; //记录'1'在sb中的第n个字符之前出现的次数 char[] s1 = sb.toString().toCharArray(); for(int i = 0; i < n-1 ; i++) { if(s1[i] == '1') { count++; } } if(count%2 == 0) { sub = new String(buf, 0, n-1, "GBK"); } else { sub = new String(buf, 0, n, "GBK"); } } return sub; }}
0 0
- java:关于字符编码的试题
- 关于java字符编码
- 关于JAVA的字符编码问题
- 小议关于java字符编码的问题
- 关于java字符的编码问题学习
- JAVA字符的编码
- JAVA字符的编码
- Java的字符编码
- 关于java中字符编码的一点心得
- 关于java中字符编码的一点心得(zt)
- 转载一片关于java字符编码的文章
- 关于Java中字符编码的一点总结
- 关于Java中各种字符编码格式的说明
- java中关于字符编码解码的思考
- [原]关于Java中字符编码的一点总结
- Java中关于字符编码的一些思考
- 关于Java字符编码几个容易弄错的问题
- 关于字符编码的整理
- OC - ClassAndObject
- Ubuntu下git使用
- poj2367
- Solr 配置文件之schema.xml
- 图论500题
- java:关于字符编码的试题
- 一致性哈希算法及其在分布式系统中的应用
- Android 开发之 SimpleTagImageView自定义ImageView
- hdu 1171 Big Event in HDU 多重背包问题
- hdu5119 Happy Matt Friends(dp)
- IOS UIGraphicsBeginImageContext 使用简介
- 【samba】RedHat samba的简单配置以及遇到的问题
- Nginx模块开发(5)————开发简单的HTTP过滤模块
- 栈的应用--简单计算器---加减乘除