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