截取指定长度的字符串(汉字不出现半个)
2014-07-15 22:56
489 查看
/** * 定义一个方法,按照指定的长度截取字符. * 如:对于"ab你好",如果取三个字节,那么子串应该只显示"ab",半个汉字舍去. * 如果是四个字节就显示"ab你",截取5个字节还是"ab你". * * 汉字在GBK编码中是2个字节,字节数组转换成十进制都是负数, * 汉字在UTF-8中是3个字节,每个字节转换成十进制也是负数. */ import java.io.IOException; public class GetStringByByte { public static void main(String[] args) throws IOException { String str = "f过好的sd喆dd"; for (int len = 0; len < str.getBytes("gbk").length; len++) { System.out.println("截取" + (len + 1) + "个字节的结果是:" + getStringByByte(str, len + 1)); } } /** * 1.先把字符串转换成字节数组(注意字符集"gbk") * 2.根据要截取的长度,从index=len-1开始,倒序编列数组 * 3.判断每个字节十进制的值 * 4.如果<0,则计数器+1; 循环直到>0 * 5.判断计数器为偶数,则直接截取(0,len)字符串 * 6.若果计数器为奇数,则截取(0,len-1)字符串 * * @param str 要截取的字符串 * @param len 要截取的长度 * @return 截取后的字符串 * @throws IOException */ private static String getStringByByte(String str, int len) throws IOException { byte[] b = str.getBytes("gbk"); int count = 0; for (int i = len - 1; i >= 0; i--) { if (b[i] < 0) count++; else break; } if (count % 2 == 0) return new String(b, 0, len, "gbk"); else return new String(b, 0, len - 1, "gbk"); } }
相关文章推荐
- 从一个包含汉字和其他字符的字符串中截取指定字节长度的字符串,不可以出现中文乱码
- C# 汉字的字符串截取指定字节的长度
- 截取一个中英文混合的字符串,不能出现截取半个汉字的问题
- 截取指定长度的字符串,区分汉字和字符
- 将汉字字母混合字符串按指定字节截取长度
- Delphi 处理在字符串截取中避免出现半个汉字
- 不区分汉字还是英文和数字,按指定字节长度截取字符串
- 截取指定长度的字符串(UTF-8专用 汉字和大写字母长度算1,其它字符长度算0.5)
- 截取指定的字符长度(其中字符串中有中文,如果有半个中文则去掉)
- Java按照字节来截取字符串的工具,不会出现半个汉字
- 如何截取指定长度汉字而不会出现以"?>"结尾,超出部分以"..."代替
- 截取指定长度的字符串(包括汉字)
- 汉字英文混合字符串 截取指定字符串长度
- 字符串截取(按指定的字节数)汉字不可以截取半个
- 截取指定长度的字符串,区分汉字和字符
- C#截取指定长度中英文字符串方法 (收藏)
- 用C#截取指定长度的中英文混合字符串 改进版
- 一个C#中截取指定长度字符串的方法(含盖半全角问题)
- 截取指定长度的字符串,超过指定长度的加...