2011-11-14 21 views
2
Class person{ 

    int name; 

}; 

ここで私はarraylistからPersonオブジェクトのセットを解析しています。"or"を文字列に追加する

"または"で区切られたarraylistのオブジェクトのすべての名前(メンバ変数)を連結する必要があります。

各連結の末尾に「または」を追加する従来の方法をいくつか試してみました。 文字列の末尾から「または」を削除しました。 私はこれが良いプログラミングではないことを知っています。

+2

なぜですか?それが動作する場合...代わりに、ループ内のインデックスを使用し、最後のものかどうか毎回チェックします。最後のエントリの場合は、 "or"を追加しないでください。 –

+1

名前の人は誰ですか? –

+0

@AshBurlaczenko何らかの識別子である可能性があります。彼がクエリ(おそらくSQL)を構築しているようなものです。 –

答えて

4

これは確かに行く方法です。私はあなたが使用することができ、あなたはそれをタグ付けされたので、あなたはArrayListのを持っていると仮定します。

public static String join(Collection data, String delimiter) { 
    final StringBuffer buffer = new StringBuffer(); 
    final Iterator iter = data.iterator(); 
    while (iter.hasNext()) { 
     buffer.append(iter.next()); 
     if (iter.hasNext()) { 
      buffer.append(delimiter); 
     } 
    } 
    return buffer.toString(); 
} 

// in your code: 
join(personList, " or "); 
+0

清潔な解決策で、 'hasNext'をうまく使います。同時実行性は問題ではないため、StringBufferの代わりにStringBuilderを使用したい場合があります。 –

+0

はい。私は文字列作成者と一緒に行くつもりです.... –

3

多くの言語には、「結合」という便利な機能があります。 Javaの場合、apache commons-lang StringUtils classで使用できる実装があります。そうで渡す:

StringUtils.join(new String[]{"a", "b", "c"}, ":"); 

"a:b:c" 

コレクションだけでなく、配列を扱うこの方法のバリエーションがありますが返されます。

あなたはcommons-collectionのCollectionUtils.collectメソッドを使用してPersonから名前を取得し、それらをjoinに渡すことができます。

おそらく、Apacheのコモンズの代わりにGuavaを使用することをお勧めします。 Guava has equivalent functionality here.

1
String separator = ""; 
StringBuilder sb = new StringBuilder(); 

for (Person person : listOfPersons) { 
    sb.append(separator).append(person.getName()); 
    separator = " OR "; 
} 
0

のstring.Splitへの対応、参加はありません。しかし、org.apache.commons.lang.StringUtils.joinがあります。それを自分で行うには、StringBuilderを使用します。コンストラクタでは、最初の容量を推測できます。 length()!= 0のループをチェックするか、またはループの後にremoveまたはsetLengthをチェックします。そしておそらくtrimToSize。事実上の問題は、問題解決自体が最適ではないことです。しかしそれは人生です。

SQLでは、ORの代わりにSQLの "IN(...、...)"も実行可能です。

関連する問題