中英文字符串长度截取并返回截取后的字符串集合
中英文截取字符串有差异 需要区分一下
/**
* 同类型字符串对象 分割长度
* @param text
* @param size
* @return
*/
public static List<String> splitEqually(String text,int size) {
// Give the list the right capacity to start with. You could use an array
// instead if you wanted.
List<String> ret = new ArrayList<String>((text.length() + size - 1) / size);
for (int start = 0; start < text.length(); start += size) {
ret.add(text.substring(start,Math.min(text.length(),start + size)));
}
return ret;
}
/**
* 中英文字符串对象,分割长度
* @param src
* @param bytes
* @return
*/
public static ArrayList<String> stringArray(String src, int bytes){
try {
if(src == null){
return null;
}
ArrayList<String> splitList = new ArrayList<String>();
//字符串截取起始位置
int startIndex = 0;
//字符串截取结束位置
int endIndex = bytes > src.length() ? src.length() : bytes;
while(startIndex < src.length()){
String subString = src.substring(startIndex,endIndex);
//截取的字符串的字节长度大于需要截取的长度时,说明包含中文字符
//在GBK编码中,一个中文字符占2个字节,UTF-8编码格式,一个中文字符占3个字节。
while (subString.getBytes("GBK").length > bytes) {
--endIndex;
subString = src.substring(startIndex,endIndex);
}
splitList.add(src.substring(startIndex,endIndex));
startIndex = endIndex;
//判断结束位置时要与字符串长度比较(src.length()),之前与字符串的bytes长度比较了,导致越界异常。
endIndex = (startIndex + bytes) > src.length() ?
src.length() : startIndex+bytes ;
}
return splitList;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}```
[借鉴地址](https://codeleading.com/article/4635247138/)
该文章提供了两个Java方法,分别用于普通字符串和中英文字符串的按字节长度截取。对于中英文字符串,考虑到中文字符在不同编码下可能占用不同字节数,方法进行了特殊处理,避免截取到一半的中文字符。

524

被折叠的 条评论
为什么被折叠?



