备一份自己用:
/**
* 截取中英文混合的字符串, 保留前面的共sum个字符 ,抛弃被截断的汉字
*
* Unicode编码,一个汉字占2个字节
*
* UTF-8编码,一个汉字占3个字节
*
* @param chinese_char_len
* 一个汉字的长度. 可选值为2和3,2表示:Unicode编码, 3表示:UTF-8编码
* @param str
* 字符串
* @param sum
* 保留字符串前面的共sum个字符, (第sum个字符被包含)
*
* @return 截取后的字符串
* @throws Exception
* chinese_char_len不在2和3这间时抛异常
*/
private static String splitChinese(final int chinese_char_len, final String str, final int sum) throws Exception
{
final int charset = chinese_char_len; //字符集编码
if (charset < 2 || 3 < charset)
{
throw new Exception("chinese_char_len可选值为2和3,2:Unicode编码,一个汉字占2个字节, 3:UTF-8编码,一个汉字占3个字节");
}
int index = sum - 1; //下标比总数少一个
if (null == str || "".equals(str))
{
return str;
}
if (index <= 0)
{
return str;
}
byte[] bt = null;
try
{
if (charset == 2)
{
bt = str.getBytes();
}
else
{
bt = str.getBytes("UTF-8");
}
}
catch (final UnsupportedEncodingException e)
{
e.getMessage();
}
if (null == bt)
{
return str;
}
if (index > bt.length - 1)
{
index = bt.length - 1; //防越界
}
//如果当前字节小于0,说明当前截取位置 有可能 将中文字符截断了
if (bt[index] < 0)
{
int jsq = 0;
int num = index;
while (num >= 0)
{
if (bt[num] < 0)
{
jsq += 1; //计数
}
else
{
break; //循环出口
}
num -= 1;
}
int m = 0;
if (charset == 2)
{
//Unicode编码
m = jsq % 2;
index -= m;
//这里是重点,去掉半个汉字(有可能是半个), m为0表示无一半汉字,
final String substrx = new String(bt, 0, index + 1); //当前被截断的中文字符整个不取
return substrx;
}
else
{
// utf-8 编码
m = jsq % 3;
index -= m;
//这里是重点,去掉半个汉字(有可能是半个), m为0表示无一半汉字,
String substrx = null;
try
{
substrx = new String(bt, 0, index + 1, "UTF-8");
}
catch (final UnsupportedEncodingException e)
{
e.getMessage();
} //当前被截断的中文字符整个不取
return substrx;
}
}
else
{
String substrx = null;
if (charset == 2)
{
//Unicode编码
substrx = new String(bt, 0, index + 1);
return substrx;
}
else
{
// utf-8 编码
try
{
substrx = new String(bt, 0, index + 1, "UTF-8");
}
catch (final UnsupportedEncodingException e)
{
e.getMessage();
}
return substrx;
}
}
}
分享到:
相关推荐
delphi 实现截取字符串中中文+英文混合截取,当字符串中包含中文和英文支付时,有时候会将一个中文截取1半,出现乱码。该demo能很好的解决该问题
13年(实习期间)飞娱互动有限公司面试游戏开发客户端/服务器端时的面试题的第一道编程题,当时就差这题没做出来,回去后想出来的。 截取一定长度的字符串,保证不把汉字截断。
ASP中英文混合字符串的截取 ASP中英文混合字符串的截取
可以截取中英文字符串,也可以含有字符,里面有好几个方法 有按字符个数截取 有按字节数来截取不会存在乱码
本人为了C++课程设计写的字符串处理头文件,支持中英文混合处理,多重通配符等等.
c#截取指定长度 中英文混合字符串 一个中文为两个字符计算,英文一个字符。
解决截取字符串中带有汉字的问题,以防截取时汉字截取一般出现错误情况
即使是10W条记录也能在1S没迅速完成你所得结果,中英混合的 如果想学习的朋友请关注下 欢迎大家下载
string常用截取字符串方法有很多,但是配合使用以下两种,基本都能满足要求: find(string strSub, npos); find_last_of(string strSub, npos); 其中strSub是需要寻找的子字符串,npos为查找起始位置。找到返回子...
自己输入一个字符串,字符串中可以包括字符和汉字,截取指定的字符串
主要介绍了php 截取中英文混合字符串,需要的朋友可以参考下
SQL截取以逗号分隔的字符串SQL截取以逗号分隔的字符串SQL截取以逗号分隔的字符串SQL截取以逗号分隔的字符串
//不分中英文按字符串长度循环每个字符截取换行 这个是隔10个字符换行一次 String psStr="asdfghjklzxcvbnmzxcvbnmsdfghaaaaaaaaaaaaaaaaaaaaaabbbbbbbbbbbbbbbbbbb"; String aa=""; String bb=""; for (int i...
给写了2个方法,一个是直接截取单个需要的字符串,比如字符串string a="ab123456",我只需要提取3,那么就是单独截取就可以了,从2开始到4结束就行。 第二个是把所有的符合条件的字符串都截取出来,提取出来,比如...
在实际工作中经常遇到截取两个相同字符串之间的字符的oracle问题,以下是相关语句
截取含有中英文的字符串,按字节进行截取,当出现汉字时不能截取半个汉字要把汉字补全。
这个小demo是截取字符串的,有2个代码,还有取消字符串中的空格,可以看看。
便于英文和中文的区别,这个是专门截取字符串的,例如英文abcd截取4位,中文值截取2位!很简单!
一个关于字符串匹配的算法,已经经过编译,希望对你有帮助