把一個字符串按一定的長度分割成多段,里面的中文不能被分開,比如短信只能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