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