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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© lovecx24 中级黑马   /  2013-11-29 11:57  /  1454 人查看  /  2 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

按字节截取字符串,但是不能截取半个汉字!(GBK编码)个人认为逻辑上没有问题啊,但是输出总是不对,总是把s1打印出来?
package com.lee;

import java.io.UnsupportedEncodingException;

public class TestByte {

        /**
         * @param args
         * @throws UnsupportedEncodingException
         */
        public static void main(String[] args) throws UnsupportedEncodingException {
                // 定义截取字节数n
                int n=6;
                String s ="abcde物联网fgh";
                byte[] b=s.getBytes("GBK");
                byte[] b1 = new byte[n];
                for(int i=0;i<n;i++){
                        b1[i]=b[i];
                }
                String s1 = new String(b1);
                //判断字符串的最后一位是否出现半个汉字
                if(s1.charAt(s1.length()-1)=='?'){
                        byte[] b2 = new byte[n+1];
                        for(int i=0;i<n;i++){
                                b2[i]=b[i];
                        }
                        String s2 = new String(b2);
                        System.out.print(s2);
                }
                System.out.print(s1);

        }

}

评分

参与人数 1技术分 +1 黑马币 +6 收起 理由
狼王 + 1 + 6 挺好的一问题,论坛要的是这样的问题.

查看全部评分

2 个回复

倒序浏览
因为'?'并不代表半个汉字,它就是一个问号字符
以下是我的思路代码

  1. import java.io.UnsupportedEncodingException;

  2. /*
  3. * 以字符为单位截取,不会出现半边汉字
  4. * 当截取的字符所构成的字符串的字节>=所要截取的长度时,停止截取
  5. */
  6. public class Test {
  7.         private static String res(String s, int n)
  8.                         throws UnsupportedEncodingException {
  9.                 StringBuilder bud = new StringBuilder();
  10.                 for (int i = 0, le = s.length(); i < le; i++) {
  11.                         if (bud.toString().getBytes("GBK").length >= n) {
  12.                                 return bud.toString();
  13.                         }
  14.                         bud.append(s.charAt(i));
  15.                 }
  16.                 return bud.toString();
  17.         }

  18.         public static void main(String[] args) throws UnsupportedEncodingException {
  19.                 String s = "abcde物联网fgh";

  20.                 for (int i = 0; i < s.length(); i++) {
  21.                         System.out.printf("截取%d个字节,实际截取的字符串为::::%s\n", i, res(s, i));

  22.                 }
  23.         }

  24. }
复制代码

评分

参与人数 1技术分 +1 黑马币 +3 收起 理由
狼王 + 1 + 3 赞一个!不错哦

查看全部评分

回复 使用道具 举报 1 0
一个汉字是两个字节,字母是一个字节,如果要求是不能截取半个汉字,哥们可以这样,告诉你一个超级简单的方法:
  1. public static void main(String[] args) {
  2.                 String str = "abcde物联网fgh";
  3.                 int num =6;
  4.                 for (int x=0;x<num ;x++ )
  5.                 {
  6.                         char a = str.charAt(x);
  7.                         //如果不是字母
  8.                         if (a>255||a<0)
  9.                         {
  10.                                 num--;
  11.                                 if (x<num)
  12.                                 {
  13.                                         System.out.println(a);
  14.                                 }
  15.                         }
  16.                         else
  17.                         {
  18.                                 System.out.println(a);
  19.                         }
  20.                 }
  21.         }
复制代码

评分

参与人数 1技术分 +1 黑马币 +6 收起 理由
狼王 + 1 + 6 很给力!

查看全部评分

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