把一个字符串按一定的长度分割成多段,里面的中文不能被分开,比如短信只能140个字节,因此一条长短信需要分开来发
public static String[] split(String string, int size) {
if (size < 2)
throw new IllegalArgumentException("最小长度为两个字节");
byte[] bytes = string.getBytes();
if (bytes.length <= size)
return new String[] { string };
// 分成的条数不确定(整除的情况下也许会多出一条),所以先用list再转化为array
List list = new ArrayList();
int offset = 0;// 偏移量,也就是截取的字符串的首字节的位置
int length = 0;// 截取的字符串的长度,可能是size,可能是size-1
int position = 0;// 可能的截取点,根据具体情况判断是不是在此截取
while (position < bytes.length) {
position = offset + size;
if (position > bytes.length) {
// 最后一条
String s = new String(bytes, offset, bytes.length - offset);
list.add(s);
break;
}
if (bytes[position - 1] > 0
|| (bytes[position - 1] < 0 && bytes[position - 2] < 0))
// 截断点是字母,或者是汉字
length = size;
else
// 截断点在汉字中间
length = size - 1;
String s = new String(bytes, offset, length);
list.add(s);
offset += length;
}
String[] array = new String[list.size()];
for (int i = 0; i < array.length; i++)
array[i] = (String) list.get(i);
return array;
}
public static void main(String[] args) {
String s = "我xxx爱NBA";
for (int i = 2; i <= s.getBytes().length; i++)
System.out.println(StringUtils.join(split(s, i), ","));
}
输出结果是:
我,xx,x,爱,NB,A
我x,xx,爱N,BA
我xx,x爱N,BA
我xxx,爱NBA
我xxx,爱NBA
我xxx爱,NBA
我xxx爱N,BA
我xxx爱NB,A
我xxx爱NBA