包含中文的字符串中截取前N个字符
2015-03-05 19:04
253 查看
package com.wangzhu.string; import java.io.UnsupportedEncodingException; public class SubStringDemo1 { public static void main(String[] args) throws UnsupportedEncodingException { String str = "我是j好abc"; String charset = "UTF-8"; printGetStrByLen(str, charset); charset = "GBK"; printGetStrByLen(str, charset); str = "我ABC汉字d"; charset = "UTF-8"; printGetStrByLen(str, charset); charset = "GBK"; printGetStrByLen(str, charset); // 我是j好abc====编码方式===UTF-8 // 我是j好abc====0 // 3===0 // // // 我是j好abc====1 // 3===0 // // // 我是j好abc====2 // 3===0 // // // 我是j好abc====3 // 3===1 // 我 // // 我是j好abc====4 // 6===1 // 我 // // 我是j好abc====5 // 6===1 // 我 // // 我是j好abc====6 // 6===2 // 我是 // // 我是j好abc====7 // 7===3 // 我是j // // 我是j好abc====8 // 10===3 // 我是j // // 我是j好abc====9 // 10===3 // 我是j // // 我是j好abc====10 // 10===4 // 我是j好 // // 我是j好abc====11 // 11===5 // 我是j好a // // 我是j好abc====12 // 12===6 // 我是j好ab // // 我是j好abc====13 // 我是j好abc // // 我是j好abc====14 // 我是j好abc // // ------------- // 我是j好abc====编码方式===GBK // 我是j好abc====0 // 2===0 // // // 我是j好abc====1 // 2===0 // // // 我是j好abc====2 // 2===1 // 我 // // 我是j好abc====3 // 4===1 // 我 // // 我是j好abc====4 // 4===2 // 我是 // // 我是j好abc====5 // 5===3 // 我是j // // 我是j好abc====6 // 7===3 // 我是j // // 我是j好abc====7 // 7===4 // 我是j好 // // 我是j好abc====8 // 8===5 // 我是j好a // // 我是j好abc====9 // 9===6 // 我是j好ab // // 我是j好abc====10 // 我是j好abc // // 我是j好abc====11 // 我是j好abc // // ------------- // 我ABC汉字d====编码方式===UTF-8 // 我ABC汉字d====0 // 3===0 // // // 我ABC汉字d====1 // 3===0 // // // 我ABC汉字d====2 // 3===0 // // // 我ABC汉字d====3 // 3===1 // 我 // // 我ABC汉字d====4 // 4===2 // 我A // // 我ABC汉字d====5 // 5===3 // 我AB // // 我ABC汉字d====6 // 6===4 // 我ABC // // 我ABC汉字d====7 // 9===4 // 我ABC // // 我ABC汉字d====8 // 9===4 // 我ABC // // 我ABC汉字d====9 // 9===5 // 我ABC汉 // // 我ABC汉字d====10 // 12===5 // 我ABC汉 // // 我ABC汉字d====11 // 12===5 // 我ABC汉 // // 我ABC汉字d====12 // 12===6 // 我ABC汉字 // // 我ABC汉字d====13 // 我ABC汉字d // // 我ABC汉字d====14 // 我ABC汉字d // // ------------- // 我ABC汉字d====编码方式===GBK // 我ABC汉字d====0 // 2===0 // // // 我ABC汉字d====1 // 2===0 // // // 我ABC汉字d====2 // 2===1 // 我 // // 我ABC汉字d====3 // 3===2 // 我A // // 我ABC汉字d====4 // 4===3 // 我AB // // 我ABC汉字d====5 // 5===4 // 我ABC // // 我ABC汉字d====6 // 7===4 // 我ABC // // 我ABC汉字d====7 // 7===5 // 我ABC汉 // // 我ABC汉字d====8 // 9===5 // 我ABC汉 // // 我ABC汉字d====9 // 9===6 // 我ABC汉字 // // 我ABC汉字d====10 // 我ABC汉字d // // 我ABC汉字d====11 // 我ABC汉字d // // ------------- } public static void printGetStrByLen(String str, String charset) throws UnsupportedEncodingException { System.out.println(str + "====编码方式===" + charset); for (int i = 0, len = str.getBytes(charset).length + 2; i < len; i++) { System.out.println(getStrByLen(str, i, charset, false)); System.out.println(); } System.out.println("-------------"); } /** * 截取字符串【UTF-8:3个byte,GBK:2个byte】 * * @param str * @param len * @param charset * @param flag * @return * @throws UnsupportedEncodingException */ public static String getStrByLen(String str, int len, String charset, boolean flag) throws UnsupportedEncodingException { System.out.println(str + "====" + len); byte[] buf = str.getBytes(charset); int step = 1; if (charset.equals("UTF-8")) { step = 2; } int length = buf.length; if (len >= length) { return str; } int count = 0, size = 0; for (int i = 0; i < length; i++) { count++; if (buf[i] < 0) { // 汉字 i += step; count += step; } size++; if (count >= len) { if (!flag) { if ((count > len) && (buf[i] < 0)) { size--; } } System.out.println(count + "===" + size); return str.substring(0, size); } } return null; } }
相关文章推荐
- C#、Java实现按字节截取字符串包含中文汉字和英文字符数字标点符号等
- 从一个包含汉字和其他字符的字符串中截取指定字节长度的字符串,不可以出现中文乱码
- 按长度截取包含中文字符的字符串
- 生成二维码 加密解密类 TABLE转换成实体、TABLE转换成实体集合(可转换成对象和值类型) COOKIE帮助类 数据类型转换 截取字符串 根据IP获取地点 生成随机字符 UNIX时间转换为DATETIME\DATETIME转换为UNIXTIME 是否包含中文 生成秘钥方式之一 计算某一年 某一周 的起始时间和结束时间
- 截取字符串 包含中文处理,一个中文字符等于2个长度
- 正则表达式判断是否存在中文和全角字符和判断包含中文字符串长度
- 给定一个字符串,包含中文字符和英文字符,取给定大小字节的子串。
- 截取字符串,中文一个字算一个字,英文两个字符算一个字
- Golang中获取中文字符串的子串字符位置及截取子串
- 截取指定的字符长度(其中字符串中有中文,如果有半个中文则去掉)
- 截取包含中文的字符串
- java中获取包含中文字符的字符串长度
- 分割字符串(有一个字符串,其中包含中文字符、英文字符和数字字符,请统计和打印出各个字符的个数)
- 获取包含中文,字母,数字集合的字符串的长度(1个汉字字符存储需要2个字节,1个英文字符存储需要1个字节)
- (Map实现)有一个字符串,其中包含中文字符、英文字符和数字字符,请统计和打印出各个字符的个数
- 通过js来获取包含中文字符的字符串的长度的方法
- SQL 截取字符串,中文算两个字符的方法
- 截取包含多字节字符的字符串
- 设计函数,输入为一个字符串,里边包含中文、英文、数字等字符,编码为GBK。中文字符的编码规则假定为:双字节组成,高字节大于0x80,低字节任意。
- python写的crond后台任务打印包含中文字符的unicode 字符串,出现异常?