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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 血色@残阳 中级黑马   /  2015-2-14 23:23  /  3781 人查看  /  34 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

题目:编写函数,从一个字符串中按字节数截取一部分,但不能截取出半个中文(GBK码表),
                  例如:从“HM程序员”中截取2个字节是“HM”,截取4个则是“HM程”,
                截取3个字节也要是"HM"而不要出现半个中文

评分

参与人数 1技术分 +1 收起 理由
lwj123 + 1 赞一个!

查看全部评分

34 个回复

正序浏览
感谢分享,继续学习!
回复 使用道具 举报
hyl 中级黑马 2015-11-28 15:04:53
33#
Android 最近就业越来越不好了。
回复 使用道具 举报
你这个方法太简便了
回复 使用道具 举报
wtjohn 发表于 2015-4-18 22:30
30天版的视频 第27天的内容

是老毕的吗
回复 使用道具 举报
感谢,可以参考下
回复 使用道具 举报
666666666666
回复 使用道具 举报
楼上猛人 不过这能保证你自己添加的那个字节如果形成乱码在构造出的字符串中只占有一个长度?乱码有这规律?
楼主。。。我怎么觉得你就没切字节一直在切字符串长度。。。看了半天楼主的我想不出他切出半个汉字了么??
回复 使用道具 举报
yijian2033 发表于 2015-7-12 00:24
好垃圾的思维,看我的

有一个小小的BUG 将 if(a<str,length())改为if(a<str.getBytes().length)
回复 使用道具 举报
好垃圾的思维,看我的



package cn.itcast;

public class Case10 {
        public static void main(String[] args) {
                String str = "HMC是XY这是一个程序";
                System.out.println(cutString(str, 9));
        }

        public static String cutString(String str, int a) {
                String s = str;
                if (a < str.length()) {
                        String s1 = new String(str.getBytes(), 0, a + 1);
                        s = s1.substring(0, s1.length() - 1);
                }
                return s;
        }
}
回复 使用道具 举报
不错,很强大
回复 使用道具 举报
李海明 发表于 2015-5-2 19:06
30天版的视频那里能下载啊?

官网提供的就是哇@@
回复 使用道具 举报
wtjohn 发表于 2015-4-18 22:30
30天版的视频 第27天的内容

30天版的视频那里能下载啊?
回复 使用道具 举报
wtjohn 发表于 2015-4-18 22:31
错了,打错了,第24天 = =

谢谢了哥们!不过我自己也写了个,我也发出来给大家看看。完全不同的思路写的。。可能有很多bug吧。

  1. public class Test10 {

  2.         /**
  3.          * 10、编写函数,从一个字符串中按字节数截取一部分,但不能截取出半个中文(GBK码表),
  4.          * 例如:从“HM程序员”中截取2个字节是“HM”,截取4个则是“HM程”,
  5.          * 截取3个字节也要是"HM"而不要出现半个中文
  6.          * @param args
  7.          * @throws UnsupportedEncodingException
  8.          */
  9.         public static void main(String[] args) throws UnsupportedEncodingException {
  10.                 // TODO Auto-generated method stub
  11.                 Scanner sc=new Scanner(System.in);
  12.                 System.out.println("输入字符串:");
  13.                 String str;
  14.                 str=sc.next();
  15.                 while(true){
  16.                         int x=0;
  17.                         System.out.println("输入截取字节数:");
  18.                         try{
  19.                                 x=sc.nextInt();
  20.                         }catch(InputMismatchException e){
  21.                                 System.out.println("输入的数字有误");
  22.                                 break;
  23.                         }
  24.                         if(x>=str.getBytes().length){
  25.                                 System.out.println(str);
  26.                         }else{
  27.                                 System.out.println(Test10.compare(str, x));
  28.                         }
  29.                 }
  30.         }
  31.        
  32.         //截取方法:返回截取结果
  33.         //此方法只对截取的最后一个字节做判断。
  34.         //如果最后一个字节是个汉子的前半部分,就去掉此半个汉子并返回。如果不是汉子的前半部分就返回当前字符串。
  35.         //如何判断最后一个字节是不是汉子的前半部分:
  36.         //如果x个字节的最后一个字节是汉子的前半部分,转成字符串它还是占一个字符空间。
  37.         //然而就跟x+1个字节的字符串长度是一样了。
  38.         //出现这种状况我们就断定最后一个字节是半个汉子的前半部分了。就去掉此字节,并返回字符串。
  39.        
  40.         //截取函数compare()
  41.         public static String compare(String str,int x) throws UnsupportedEncodingException{
  42.                 //out是函数的返回值,也就是要打印的结果了。
  43.                 String out=null;
  44.                 //strByte是str的字节数组
  45.                 byte[] strByte=str.getBytes("GBK");
  46.                 //byt1为str的前x个字节,
  47.                 byte[] byt1=new byte[x];
  48.                 for(int i=0;i<x;i++){
  49.                         byt1[i]=strByte[i];
  50.                 }
  51.                 //byt2为str的前x+1个字节,
  52.                 byte[] byt2=new byte[x+1];
  53.                 for(int i=0;i<=x;i++){
  54.                         byt2[i]=strByte[i];
  55.                 }
  56.                 //将x个字节和x+1个字节转成字符串
  57.                 String str1=new String(byt1,"GBK");
  58.                 String str2=new String(byt2,"GBK");
  59.                 //取x个字节的字符串长度。len1
  60.                 int len1=(str1.length());
  61.                 //取x+1个字节的字符串。len2
  62.                 int len2=(str2.length());
  63.                 //判断x和x+1个字节转成字符串后的长度
  64.                 //若str1和str2的字符串长度一样那第x个字节肯定是半个汉子。
  65.                 if(len1==len2){
  66.                         out=str1.substring(0,str1.length()-1);
  67.                         System.out.println("第"+x+"个字节是个汉子前半段");
  68.                 }else{
  69.                         out=str1;
  70.                         System.out.println("第"+x+"个字节是个汉子前半段");
  71.                 }
  72.                 return out;
  73.                
  74.         }

  75. }
复制代码
回复 使用道具 举报
挥斥方遒 发表于 2015-4-18 21:01
这个是在哪个视频里头讲到了啊?我怎么没注意呢。。。求出处。看了半天头都大了。。 ...

错了,打错了,第24天 = =
回复 使用道具 举报
挥斥方遒 发表于 2015-4-18 21:01
这个是在哪个视频里头讲到了啊?我怎么没注意呢。。。求出处。看了半天头都大了。。 ...

30天版的视频 第27天的内容
回复 使用道具 举报
wtjohn 发表于 2015-2-16 11:11
这个视频里有讲的啊

这个是在哪个视频里头讲到了啊?我怎么没注意呢。。。求出处。看了半天头都大了。。
回复 使用道具 举报
学习一下
回复 使用道具 举报
感谢分享
回复 使用道具 举报
血色@残阳 发表于 2015-2-14 23:26
之前在网上看到了关于这题的一些代码,基本上都是有很大问题的,反正我是没有找到完全正确的代码的,后来我 ...

第22行应该是||
回复 使用道具 举报
这个视频里有讲的啊
回复 使用道具 举报
12下一页
您需要登录后才可以回帖 登录 | 加入黑马