2017-06-19 3 views
0

私の要件は、クラスとしてList<String>をパラメータとして受け入れるJavaメソッドを記述することです。今、私はArraylist内の複数の文字列を連結して任意の値を持つことができます

public String encode(List<String> ls){ 
    StringBuffer sb = new StringBuffer(); 
    ListIterator<String> lis = ls.listIterator(); 
    while(lis.hasNext()){ 
     sb.append(lis.next()); 
     /*my code here 
     * sb.append(lis.next()); 
     * sb.append(some delim); 
     * 
     * 
     */ 
    } 
    //my code here 
    return sb.toString();  
} 

を連結しなければならない今、私に行う方法を提案してくださいリストのそれらの文字列のことができ、任意の値(文字/ NUM /特殊な文字など)が含まれているので、私は,/:/;などのような一般的な区切り文字を使用することはできません連結する。

また、別の方法で同じ連結文字列を分割する必要があるかもしれません。だから私は後でリストを作成するために後で使用できるいくつかのデリミタやその他のオプションを使う必要があります。

+0

リストをシリアル化する必要がありますか?なぜそれを文字列に変更する必要があるのですか – ByeBye

+0

[Java:List を文字列に変換する]の可能な複製(https://stackoverflow.com/questions/1751844/java-convert-liststring-to-a-string) – Tom

+0

@Tomあなたはその質問を読んだのですか? –

答えて

0

これは理想的ではないかもしれませんが、これを行う方法の1つはランダムなフレーズで連結することです。だから、各文字列の間に余分なフレーズや単語を追加し、その後でそのフレーズを区切り記号として使用します。

0

最初に、ストア/転送するオブジェクトをシリアル化するだけの場合は、そうしないでください。 @Serializableアノテーションを使用して、Java Serializing APIでそれを処理させます。

理由を理由にリストを文字列に変換して戻す必要がある場合は、珍しい区切り文字(<|>などの文字セット)を使用するか、余分に安全で、uuid区切り文字を使用して文字列を開始することをおすすめします(<uuid>のように)それを識別することができます。特定のuuidは、あなたが受け取ったリストには表示されません。 (あなたがuuidを再利用してその契約を壊さない限り)リストのリストを扱うときでも、UUIDの方法は安全です(デリミタをエスケープしたり、何かクレイジーなことをする必要はありません)。しかし、ちょうど<|>または,を区切り文字として使用してから、文字列に/から文字列に変換するときにそれを別のものにエンコード/デコードするほうが安いです。 (パフォーマンスが実際に重要な場合)

そして最後に、私はちょうど

public String encode(List<String> ls){ 
    StringBuffer sb = new StringBuffer(); 
    String delim = getDelimiter(); 
    for(String s : ls){ 
     sb.append(lis.next()); 
     sb.append(delim); 
    } 
    return sb.toString();  
} 

はそんなに単純である...と言っています。イテレータを必要としない限り(イテレータを使用する必要がある場合を除いて)、イテレータを取得するのは面倒ではありません。「次へ」を読む前に必ず「hasNext」をチェックしてください。

関連する問題