utf-8编码,字符串根据字节长度做截取
场景:超长字符串要插入数据库,库中字段长度不够,需要程序中做截取。
package com.test.string;
import org.springframework.util.StringUtils;
/**
* @Author AngleFlyyy
* @Date 2020/8/31 14:30
*/
public class SubStringTest {
public static void main(String[] args) {
//中文逗号、句号是3个字节长度,a是英文,1个字节长度
String str = "我们都是好孩子aa,天天搬砖的孩子。。。";
String strNew1 = SubStringTest.subStringByBytes(str, 23);
System.out.println("strNew1 = " + strNew1);
String strNew2 = SubStringTest.subStringByBytes(str,30);
System.out.println("strNew2 = " + strNew2);
}
/**
*@Date 2020/8/31 15:07
*@params :
* @param str 需要截取的字符串
* @param bytes 截取的字节数
*@return java.lang.String
*@Description :根据bytes的长度,截取utf-8编码的str字符串
*/
public static String subStringByBytes(String str, int bytes){
if (StringUtils.isEmpty(str)) return "";
int len = 0;
for (int i = 0; i < str.length(); i++) {
/**
* utf-8中,一个汉字占3个字节
* 前256位不是汉字,所以charAt(i)>255的是汉字(下标从0开始);
*/
len += str.charAt(i) > 255 ? 3 : 1;
if (len > bytes) {
return str.substring(0, i);
}
}
return str;
}
}
运行结果: