600字范文,内容丰富有趣,生活中的好帮手!
600字范文 > Java按字节数截取字符串

Java按字节数截取字符串

时间:2018-07-15 12:42:28

相关推荐

Java按字节数截取字符串

最近在开发的过程中遇到的问题,接口要求传入参数在255个字节以内(GBK),但是入参是一个既有中文又有英文的字符串,所以需要按字节截取,翻了半天也没找到有现成的方法,于是选择了这样一种方法实现。

/*** 按字节数截取字符串** @param str 要截取的字符串* @param totalLength 截取长度* @return*/public static String substringByByte(String str,int totalLength){//删掉字符串中所有的的空格回车等String replaceBlank = str.replace(" ", "").replace("\r\n\t","");char[] chars = replaceBlank.toCharArray();StringBuffer sb = new StringBuffer();int chLength=2;int enLength=1;//判断loopChar是否为中文Pattern pc = pile("[\u4e00-\u9fa5]");Matcher mc;//判断loopChar是否为中文标点Pattern pp = pile("[\uFF01]|[\uFF0C-\uFF0E]|[\uFF1A-\uFF1B]|[\uFF1F]|[\uFF08-\uFF09]|[\u3001-\u3002]|[\u3010-\u3011]|[\u201C-\u201D]|[\u-\u]|[\u-\u]|[\u2026]|[\u3008-\u300F]|[\u3014-\u3015]");Matcher mp;int length = 0;for (char loopChar : chars) {mc = pc.matcher(String.valueOf(loopChar));mp = pp.matcher(String.valueOf(loopChar));//如果为中文或中文标点占2字节,如果是英文字符或数字占1字节,总长度超过要截取的长度跳出循环if ((mc.find() || mp.find()) && length + chLength < totalLength) {sb.append(loopChar);length += chLength;} else if (length + enLength < totalLength) {sb.append(loopChar);length += enLength;} else {break;}}return sb.toString();}

只需要传入需要截取的字符串和目标长度即可。

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。