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