黑马程序员技术交流社区

标题: 自己做了下黑马基础题的最后题,当然也借鉴了帖子的思... [打印本页]

作者: 莫里亚蒂    时间: 2015-4-22 22:55
标题: 自己做了下黑马基础题的最后题,当然也借鉴了帖子的思...
package javatraining2;
import java.util.Scanner;
import java.io.UnsupportedEncodingException;
/**
编写函数,从一个字符串中按字节数截取一部分,但不能截取出半个中文(GBK码表)
例如:从“HM程序员”中截取2个字节是“HM”,截取4个则是“HM程”,截取3个字节也要是
"HM"而不要出现半个中文
*/


class ShiYan1 {
        public static void main(String[] args){
                Scanner sc=new Scanner(System.in);
                System.out.println("请输入内容");
                String x=sc.nextLine();
                Scanner s=new Scanner(System.in);
                System.out.println("请输入截取位置数值");
                int y=s.nextInt();
                byteSubStr(x, y);
               
        }
        public static void byteSubStr(String str, int len) {
                String s = null; // 初始化字符串s,赋值为空
                if (str != null) // 传入的字符串不能为空
                {
                        byte[] a = null; // 初始化字节数组,赋值为空
                        try {
                                a = str.getBytes("GBK"); // 将字符串转化为字节数组,GBK码表,此时字节数组的长度为14
                        } catch (UnsupportedEncodingException e) // 捕捉编码失败异常
                        {
                                e.printStackTrace();
                        }
                        // System.out.println("String length:"+a.length);打印字节数组的长度
                        if (a.length <= len) {
                                s = str; // 如果要求取出的字节长度大于字节数组应有长度,则将s初始化为str
                        } else if (len > 0) {
                                s = new String(a, 0, len); // 如果字节长度在字节数组长度范围内,则根据要求取出长度len,创建新的字符串s。
                                int length = s.length(); // 获取新字符串的长度
                                // System.out.println(s.length());
                                if (str.charAt(length - 1) != s.charAt(length - 1))// 如果原字符串中相应位置上的字符与
                                // 新字符串相应位置上的字符不相等,说明新字符串中相应位置只有半个中文,则应该讲数组指针向左移一位,形成新的子串。
                                {
                                        if (length < 2) {
                                                s = null; // 如果新字符串的长度小于2,则将新字符串赋值为空。
                                        }

                                        else {
                                                s = s.substring(0, length - 1); // 将符合条件的子串复制给s
                                        }
                                }
                        }
                }
                System.out.println(s);
        }
}


作者: 莫里亚蒂    时间: 2015-4-23 19:37
一起加油啊O(∩_∩)O~
作者: hejinze    时间: 2015-4-23 22:09
看一看,学一学。
作者: xiaowen_wu    时间: 2015-4-23 22:16
学习学习 、、、、
作者: 依秋无泪    时间: 2015-4-23 22:22
我收藏来学习下,不错的赶脚
作者: dengxing    时间: 2015-4-23 22:26
赞!!!!!




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2