本帖最后由 qian0217wei 于 2015-6-10 01:09 编辑
很久没发帖了,发个帖子证明下我的存在,还有分享一道基础测试题!希望大家给出意见!- /*
- * 、编写函数,从一个字符串中按字节数截取一部分,但不能截取出半个中文(GBK码表),
- * 例如:从“HM程序员”中截取2个字节是“HM”,截取4个则是“HM程”,截取3个字节也要是"HM"而不要出现半个中文
- * 思路:因为GBK的编码方式汉字是两个负数,字符对应的是一个正数,所以可以通过将字符串变成字节数组,通过遍历获取负数出现的次数,用count记录,如果截取的数对应的编码大于0,就直接截取,如果小于0判断count%2==0;满足就直接从截取位置截取,不满足就从前个位置开始截取。
- * */
- import java.io.UnsupportedEncodingException;
- public class SplitString {
- public static void main(String[] args) throws UnsupportedEncodingException {
- String sc = "HM程序员";
- String s1 = split(sc, 3);
- System.out.println(s1);
- }
- public static String split(String s, int x)
- throws UnsupportedEncodingException {
- byte[] bytes = null;
- if (s != null) {
- bytes = s.getBytes("GBK");
- }
- if (x > bytes.length) {
- System.out.println("角标越界");
- }
- int count = 0;
- for (int i = 0; i < x; i++) {
- if (bytes[i] < 0)
- count++;
- // System.out.println(count);
- }
- if (bytes[x - 1] > 0) {
- s = s.substring(0, x - count / 2);//汉字出现的两次,所以要减去count/2
- } else if (count % 2 == 0) {
- s = s.substring(0, x - count / 2);
- } else {
- s = s.substring(0, x - 1 - count / 2);
- }
- return s;
- }
- }
复制代码
欢迎交流,提出意见!
|
|