A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 余志强 黑马帝   /  2011-10-1 16:29  /  1779 人查看  /  3 人回复  /   1 人收藏 转载请遵从CC协议 禁止商业使用本文

写一个函数,2个参数,1个字符串,1个字节数,返回截取的字符串,要求字符串中的中文不能出现乱码:如(“我ABC”,4)应该截为“我AB”,输入(“我ABC汉DEF”,6)应该输出为“我ABC”而不是“我ABC+汉的半个”。

评分

参与人数 1技术分 +1 收起 理由
wangfayin + 1

查看全部评分

3 个回复

倒序浏览
黑马网友  发表于 2011-10-1 22:52:04
沙发
以前好像做过的,现在想不出来,只记得那时候查文档设置了一下编码
回复 使用道具 举报
查找得知汉字占的2个byte都是小于0的,所以这样写了,运行没有错误,可能在执行效率上存在缺陷,不知各位是否有更好的方法!![code=java]public class CutTest {

        public static void main(String[] args) throws Exception {
                System.out.println(cut("我ABC汉DEF", 2));
        }

        public static String cut(String str, int num) throws Exception {
                byte[] buf = str.getBytes();
                String strC = null;
                int n = 0;
                if (num <= buf.length && num > 0) {
                        for (int i = num; i < buf.length; i++) {// 从buf的第num+1个值计算n的值
                                if (buf > 0) {
                                        // 如果下一个为字母,则跳出循环
                                        break;
                                }
                                n++;
                        }
                        if (n % 2 == 0) {//当n=0时也执行下面的代码
                                strC = new String(buf, 0, num);
                        } else {
                                strC = new String(buf, 0, num - 1);
                        }
                } else {
                        strC = "String index out of range!!!";
                }
                return strC;
        }

}[/code]不好意思,更新了好几回,上面应该是从buf的第num+1个值计算n的值,这样保证字母和汉字混合时,截取不出错
[ 本帖最后由 曾公亮 于 2011-10-02  13:32 编辑 ]

评分

参与人数 1技术分 +1 收起 理由
wangfayin + 1

查看全部评分

回复 使用道具 举报
在String类里面有charAt的方法,可以返回一个字符的ASCII码,可以利用ASCII码来判断此字符是不是一个汉字。[code=java]public class Test {
        public static String toString(String str, int sum) {
                int temp = 0;
                for (int i = 0; i < str.length(); i++) {
                        if (temp == sum) {
                                return str.substring(0, i);
                        }
                        int ascii = str.charAt(i);
                        if (ascii < 256) {//ascii码为英文的时候+1
                                temp += 1;
                        } else {//否则 +2
                                temp += 2;
                                if (temp > sum) {
                                        return str.substring(0, i);
                                }
                        }
                }
                return str;
        }
        

        public static void main(String[] args) {
                String temp = "我ABC汉DEF";
                System.out.println(toString(temp, 6));
        }
}[/code]————参考了csdn的一位同学的代码
[ 本帖最后由 许晨峰 于 2011-10-03  11:12 编辑 ]

评分

参与人数 1技术分 +1 收起 理由
wangfayin + 1

查看全部评分

回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马