374、编写一个截取字符串的函数,输入为一个字符串和字符数,输出为按字符截取的字符串。 
但是要保证汉字不被截半个,如“我ABC”4,应该截为“我AB”,输入“我ABC汉DEF”,6,应该输出为“我ABC”而不是“我ABC+汉的半个”。

解决方案 »

  1.   

    不是有人回复了吗?
    多开一个帖子?
    http://topic.csdn.net/u/20110821/08/f0b5c730-2613-4060-aaa3-03b96d0dc1e6.html?42655
      

  2.   

    有人问过类似的问题
    http://topic.csdn.net/u/20110821/08/bed95274-215e-44d8-949e-8617c27a5925.htmlpublic 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();
    }
      

  3.   


    或者判断byte的高位和低位来区分是否为一个汉字。
      

  4.   

    因为不同编码字节数不一样,可以考虑加上编码参数试试看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;
        }
    }
      

  5.   

    可以获取当前字符的int值,java中第一个汉子是一,小于一这个字符值的都是字母