当前位置:编程学习 > JAVA >>

求高手解决字符串截取的问题

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();
}
--------------------编程问答--------------------
引用 3 楼 qybao 的回复:
有人问过类似的问题
http://topic.csdn.net/u/20110821/08/bed95274-215e-44d8-949e-8617c27a5925.html

Java code
public String leftByteString(String src, int len) {
    StringBuilder buf = new StringBuilder();……


或者判断byte的高位和低位来区分是否为一个汉字。 --------------------编程问答-------------------- 根据ascii码 --------------------编程问答-------------------- 因为不同编码字节数不一样,可以考虑加上编码参数试试看

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;
    }
}
--------------------编程问答-------------------- 可以获取当前字符的int值,java中第一个汉子是一,小于一这个字符值的都是字母 --------------------编程问答-------------------- 看我的blog --------------------编程问答-------------------- 这不是很多面试宝典里有的题么。。
补充:Java ,  Java SE
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,