/**
* 根据指定的字节长度截取字符串
* @param orignal : 原始字符串
* @param count : 要截取的字节长度
* @return
*/
public static String substringByByteLength(String orignal, int count) {
if(orignal != null && !"".equals(orignal)){
int tmp = count;
try {
orignal = new String(orignal.getBytes("GBK"),"GBK");
System.out.println(orignal.getBytes("GBK").length);
if(tmp > 0 && tmp < orignal.getBytes("GBK").length){
StringBuffer buff = new StringBuffer();
char c;
for(int i = 0; i < tmp; i++){
c = orignal.charAt(i);
if((buff.toString() + String.valueOf(c)).getBytes("GBK").length <= count ){
buff.append(c);
}
if(isChinese(c)){
--tmp; //遇到中文汉字,截取字节总数减1
}
}
return buff.toString();
}
return orignal;
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
}
return "";
}
public static boolean isChinese(char ch) {
//获取此字符的UniCodeBlock
Character.UnicodeBlock ub = Character.UnicodeBlock.of(ch);
// GENERAL_PUNCTUATION 判断中文的“号
// CJK_SYMBOLS_AND_PUNCTUATION 判断中文的。号
// HALFWIDTH_AND_FULLWIDTH_FORMS 判断中文的,号
if (ub == Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS || ub == Character.UnicodeBlock.CJK_COMPATIBILITY_IDEOGRAPHS
|| ub == Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS_EXTENSION_A || ub == Character.UnicodeBlock.CJK_UNIFIED_IDEOGRAPHS_EXTENSION_B
|| ub == Character.UnicodeBlock.CJK_SYMBOLS_AND_PUNCTUATION || ub == Character.UnicodeBlock.HALFWIDTH_AND_FULLWIDTH_FORMS
|| ub == Character.UnicodeBlock.GENERAL_PUNCTUATION) {
return true;
}
return false;
}
java通过指定的字节长度截取字符串
最新推荐文章于 2024-07-30 03:18:59 发布