日期:2014-05-20  浏览次数:20624 次

关于截取字符串的面试题
网络上流传的JAVA面试题中   一般都有这么一题:
编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串。   但是要保证汉字不被截半个,如“我ABC”4,应该截为“我AB”,输入“我ABC汉DEF”,6,应该输出为“我ABC”而不是“我ABC+汉的半个”。  
估计已经很普及了……今天我在面试的时候看到了这题,仔细一看,发现完全不是想象中的那么简单……   最后没有完成。   回来以来自己想了一下午:未有结果,又找来网上的答案   发现:根本就不对!       请知道的大人给个正解,谢谢了。
(新手上路,还请告诉我如何给分)

------解决方案--------------------
经运行验证sswhsz()的方法是正确的。此处的编码方式应该是操作系统默认的GB编码,即汉字占2个字节且第一个字节的最高位是1,如果理解为有符号数的话,就是负数;而英文占1个字节,符合ASC2码。
------解决方案--------------------
又想了一下,因为索引-1处的字节有可能是前一个汉字的一般,
所以,好像必须要遍历才能识别出最后一个字节是否前一个汉字的一半,

只好又改了一下,汗...
String s = "我ABC汉DEF ";
int len = 6;

byte[] bs = s.getBytes();
boolean b = false;// 是否汉字的一半
for (int i = 0; i < len; i++)
b = !b && bs[i] < 0;

String s1 = new String(bs, 0, b ? len - 1 : len);
System.out.println(s1);
------解决方案--------------------
呵呵 就按照我的 最大子串 不管什么编码 应该都没有问题