黑马程序员技术交流社区
标题:
一道基础测试题,希望给出意见!
[打印本页]
作者:
qian0217wei
时间:
2015-6-10 00:59
标题:
一道基础测试题,希望给出意见!
本帖最后由 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;
}
}
复制代码
欢迎交流,提出意见!
作者:
想要那片海
时间:
2015-6-10 08:16
我是用截取后的子字符串与元字符串相比较,如果元字符串包含子字符串,那么就说明没有截取到半个中文,如果不包含就是截取了半个中文,这时候让截取数-1,
作者:
qian0217wei
时间:
2015-6-10 22:40
想要那片海 发表于 2015-6-10 08:16
我是用截取后的子字符串与元字符串相比较,如果元字符串包含子字符串,那么就说明没有截取到半个中文,如果 ...
可以把代码发出来,看看吗?!
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/)
黑马程序员IT技术论坛 X3.2