2017-02-01 13 views
0

次のメッセージを10文字で区切りたいと思います。私はすべての部分をStringBuilderオブジェクトに追加したいと思います。私は出力を取得しています文字列メッセージを文字で10文字に分割する

if(getMsgOtherPart(message) != null){  
     System.out.println("part message::"+getMsgOtherPart(message)); 
     String newMessage = getMsgOtherPart(message) ; 

     int len = newMessage.length(); 
     System.out.println("len::"+len); 
     int firstIndex = 0; 
     int limit = 10; 
     int lastIndex = 10; 
     int count = 0; 
     StringBuilder sb = new StringBuilder(); 
     String completeMessage = null; 
     for(int i = 0; i <= len;i++){ 
      count++; 
      if(count == limit && lastIndex < len){ 
       sb.append(getSmsUniqueHeader()); 
       sb.append(newMessage.substring(firstIndex,lastIndex)); 
       sb.append("#"); 
       sb.append("\n");     
       firstIndex = lastIndex; 
       lastIndex = firstIndex + limit; 
       count = 0; 
      } else if(count < limit && i == len) { 
       System.out.println("lastIndex:: "+lastIndex); 
       sb.append(getSmsUniqueHeader()); 
       sb.append(newMessage.substring(lastIndex-10)); 
       sb.append("#"); 

      }    

     } 
     completeMessage = sb.toString(); 
     System.out.println("message::\n"+completeMessage); 
    } 

message:: 
$04421,1,13# 
$,S,312|400# 
$0004130,1;# 
$4000000491# 
$;400000540# 
$0,1;400000# 
$0;40000000# 
$63,1;40000# 
$00076,1;40# 
$00000776,2# 
$;400000078# 
$8,2;400000# 
------------ 
$0;# 

は私が私の解決策を最適化するために教えてください

04421,1,13,S,312|4000004130,1;4000000491,1;4000005240,1;4000005789,2;4000004978,2;4000004934,2;4000004936,1;4000000569,2;4000005400,1;4000000;4000004934,2; 

私は、次の解決策を行っています。

+2

あなたは任意にその文字列を10文字で区切りたいですか?期待される成果が何であるかを教えてください。 –

+0

出力が追加されました –

+0

これは間違った出力ですか?代わりに、あなたが好きなことを示すことができますか? –

答えて

2

私のプロジェクトの1つでこのようなことをしていましたが、ここではListを返す関数がありますが、それを変更してStringBuilderを使用することができます。

public List<String> splitStringEqually(String txtStr, int subStringSize) { 
    List<String> splittedStringList = new ArrayList<String>(); 
    for (int start = 0; start < txtStr.length(); start += subStringSize) { 

     splittedStringList.add(txtStr.substring(start, Math.min(txtStr.length(), start + subStringSize))); 
    } 
    return splittedStringList; 
} 
+0

部分文字列を説明またはリンクできます(start、Math.min(txtStr.length()、start + subStringSize)) –

0

文字列は内部的にchar配列として保持されます。その文字配列のコピーをmessage.toCharArray()で取得し、シンプルなループまたはjava 8のストリームを使用して10の塊の要素を選択し、必要な処理を行います。

0

Rajen Raiyarela's answerに重く基づかとOPからの特定の要求に対処し、コードは(その1、いないこの1 upvoteしてください!)このようになります。

public String splitStringEqually(String txtStr, int subStringSize) { 
    // Start off with the header 
    StringBuilder sb = new StringBuilder("message::\n"); 

    int len = txtStr.length(); 
    for (int start = 0; start < len; start += subStringSize) { 
     sb.append("$"); 
     // Copy the next 10 characters, or less if at end of string 
     // Does not use txtStr.substring() as that creates an 
     // unnecessary temporary string 
     sb.append(txtStr, start, Math.min(len, start + subStringSize)); 
     sb.append("#\n"); 
    } 

    return sb.toString(); 
} 

これは単純に呼び出すことができます。

String completeMessage = splitStringEqually(newMessage, limit); 
1

GoogleのGuavaライブラリを使用して、このためにSplitterクラスを使用できます。

StringBuilder sb=new StringBuilder(); 
    for(String s: Splitter.fixedLength(10).split(message)){ 
     sb.append(s); 
     sb.append("#\n"); 
    } 
    System.out.println(sb.toString());