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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

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);
        }
}

6 个回复

倒序浏览
一起加油啊O(∩_∩)O~
回复 使用道具 举报
看一看,学一学。
回复 使用道具 举报
学习学习 、、、、
回复 使用道具 举报
我收藏来学习下,不错的赶脚
回复 使用道具 举报
赞!!!!!
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马