求高手解决字符串截取的问题
374、编写一个截取字符串的函数,输入为一个字符串和字符数,输出为按字符截取的字符串。但是要保证汉字不被截半个,如“我ABC”4,应该截为“我AB”,输入“我ABC汉DEF”,6,应该输出为“我ABC”而不是“我ABC+汉的半个”。
--------------------编程问答-------------------- 不是有人回复了吗?
多开一个帖子?
http://topic.csdn.net/u/20110821/08/f0b5c730-2613-4060-aaa3-03b96d0dc1e6.html?42655 --------------------编程问答-------------------- 对了,别看这是传统的题目,要写得正确还不是很容易呢。呵呵。 --------------------编程问答-------------------- 有人问过类似的问题
http://topic.csdn.net/u/20110821/08/bed95274-215e-44d8-949e-8617c27a5925.html
public String leftByteString(String src, int len) {--------------------编程问答--------------------
StringBuilder buf = new StringBuilder();
int count = 0;
for (char c : s.toCharArray()) {
count += (c>=0x4e00 && c<=0x9fa5) ? 2 : 1;
if (count > len) {
return buf.toString();
}
buf.append(c);
}
return buf.toString();
}
或者判断byte的高位和低位来区分是否为一个汉字。 --------------------编程问答-------------------- 根据ascii码 --------------------编程问答-------------------- 因为不同编码字节数不一样,可以考虑加上编码参数试试看
--------------------编程问答-------------------- 可以获取当前字符的int值,java中第一个汉子是一,小于一这个字符值的都是字母 --------------------编程问答-------------------- 看我的blog --------------------编程问答-------------------- 这不是很多面试宝典里有的题么。。
public class Test {
public static void main(String[] args) throws Throwable {
System.out.println(byteString("我ABC汉DEF", 6, "UTF-8"));
System.out.println(byteString("我ABC汉DEF", 6, "UTF-16"));
}
public static String byteString(String src, int length, String charset) throws Exception {
int len = (length > src.length()) ? src.length() : length;
for (int i=len; i>=0; i--) {
if (src.substring(0, i).getBytes(charset).length <= length) {
return src.substring(0, i);
}
}
return src;
}
}
补充:Java , Java SE