把一個(gè)字符串按一定的長度分割成多段,里面的中文不能被分開,比如短信只能140個(gè)字節(jié),因此一條長短信需要分開來發(fā)
public static String[] split(String string, int size) {
        
if (size < 2)
            
throw new IllegalArgumentException("最小長度為兩個(gè)字節(jié)");
        
byte[] bytes = string.getBytes();
        
if (bytes.length <= size)
            
return new String[] { string };
        
// 分成的條數(shù)不確定(整除的情況下也許會(huì)多出一條),所以先用list再轉(zhuǎn)化為array
        List list = new ArrayList();
        
int offset = 0;// 偏移量,也就是截取的字符串的首字節(jié)的位置
        int length = 0;// 截取的字符串的長度,可能是size,可能是size-1
        int position = 0;// 可能的截取點(diǎn),根據(jù)具體情況判斷是不是在此截取
        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))
                
// 截?cái)帱c(diǎn)是字母,或者是漢字
                length = size;
            
else
                
// 截?cái)帱c(diǎn)在漢字中間
                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), 
","));
    }


輸出結(jié)果是:

我,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