美文网首页
在指定编码环境下,按给定字节数截取字符串问题

在指定编码环境下,按给定字节数截取字符串问题

作者: 鉴闻俗说 | 来源:发表于2018-04-19 11:26 被阅读0次

1、题目描述

在GBK编码环境下,编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串。但是要保证汉字不被截半个,如"我ABC"4,应该截为"我AB",输入"我ABC汉DEF",6,应该输出为"我ABC"而不是"我ABC+汉的半个"。

2、解决代码

 public static String subString(String str, int splitByteNum) throws UnsupportedEncodingException
        {
            //输入无效判断
            if (null == str || "".equals(str) || splitByteNum <= 0)
            {
                return "";
            }

            int tempSubStrLength = splitByteNum;
            //截取长度为要截取字节数的子串。说明str.length()字符串中字符个数一定小于等于字节数。
            String subStr = str.substring(0, tempSubStrLength > str.length() ? str.length() : tempSubStrLength);
            //在GBK编码下,得到子串的字节长度
            int subStrByteNum = subStr.getBytes("GBK").length;
            
            //如果子串的字节长度大于字符长度,说明一定有汉字
            while (subStrByteNum > tempSubStrLength)
            {
                /**
                 * 在子串末尾去掉一个字符,重新计算子串在GBK下的字节长度。
                 * 因为是去掉一个字符,而汉字占一个字符,所以不用考虑半个汉字的问题
                 */
                int subStrLength = --splitByteNum;
                subStr = str.substring(0, tempSubStrLength > str.length() ? str.length() : subStrLength);
                subStrByteNum = subStr.getBytes("GBK").length;
            }

            return subStr;
        }

参考文章:http://songjianyong.iteye.com/blog/1399241

相关文章

  • 在指定编码环境下,按给定字节数截取字符串问题

    1、题目描述 在GBK编码环境下,编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串。但...

  • Java21-6 IO技术练习2

    分割文件 并写入配置文件 按字节数截取一个字符串 abc你好 如果截到半个中文 舍弃字符串--->字节数组 编码...

  • 十九、String.getBytes(StandardChars

    1.字节数组和字符串间转换时指定编码 1)第一种方式,通过字符串指定编码,需要catch或throw检查异常Uns...

  • 常用JS方法整理

    原文链接目录: 截取指定字节数的字符串 判断是否微信 获取时间格式的几个举例 获取字符串字节长度 对象克隆、深拷贝...

  • HWOJ按字节截取字符串

    编写一个截取字符串的函数,输入为一个字符串和字节数,输出为按字节截取的字符串。但是要保证汉字不被截半个,如"我AB...

  • 个人JS工具库

    1.截取指定字节数的字符串 2.判断是否微信 3.获取时间格式的几个举例 4.获取字符串字节长度 5.对象克隆、深...

  • Java IO流(转换流的字符编码)

    编码:字符串变成字节数组,解码:字节数组变成字符串。String-->byte[];str.getBytes[ch...

  • 字符串截取

    按指定的字符串截取参考:http://www.cnblogs.com/ace9/archive/2012/08/3...

  • 常用shell

    AWK 多个分隔符 删除文件中包含指定字符串的行 替换指定字符串 截取n到m列 diff 文件差异 字符串截取 $...

  • OC 字符串的截取

    1、字符串截取 2、从指定位置开始截取n个长度 3、分隔字符串 4、字符串的截取替换 5、替换掉截取某部分的字符串...

网友评论

      本文标题:在指定编码环境下,按给定字节数截取字符串问题

      本文链接:https://www.haomeiwen.com/subject/bjtwkftx.html