Class person{
int name;
};
ここで私はarraylistからPersonオブジェクトのセットを解析しています。"or"を文字列に追加する
"または"で区切られたarraylistのオブジェクトのすべての名前(メンバ変数)を連結する必要があります。
各連結の末尾に「または」を追加する従来の方法をいくつか試してみました。 文字列の末尾から「または」を削除しました。 私はこれが良いプログラミングではないことを知っています。
Class person{
int name;
};
ここで私はarraylistからPersonオブジェクトのセットを解析しています。"or"を文字列に追加する
"または"で区切られたarraylistのオブジェクトのすべての名前(メンバ変数)を連結する必要があります。
各連結の末尾に「または」を追加する従来の方法をいくつか試してみました。 文字列の末尾から「または」を削除しました。 私はこれが良いプログラミングではないことを知っています。
これは確かに行く方法です。私はあなたが使用することができ、あなたはそれをタグ付けされたので、あなたは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 ");
清潔な解決策で、 'hasNext'をうまく使います。同時実行性は問題ではないため、StringBufferの代わりにStringBuilderを使用したい場合があります。 –
はい。私は文字列作成者と一緒に行くつもりです.... –
多くの言語には、「結合」という便利な機能があります。 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.
String separator = "";
StringBuilder sb = new StringBuilder();
for (Person person : listOfPersons) {
sb.append(separator).append(person.getName());
separator = " OR ";
}
のstring.Splitへの対応、参加はありません。しかし、org.apache.commons.lang.StringUtils.joinがあります。それを自分で行うには、StringBuilderを使用します。コンストラクタでは、最初の容量を推測できます。 length()!= 0のループをチェックするか、またはループの後にremoveまたはsetLengthをチェックします。そしておそらくtrimToSize。事実上の問題は、問題解決自体が最適ではないことです。しかしそれは人生です。
SQLでは、ORの代わりにSQLの "IN(...、...)"も実行可能です。
なぜですか?それが動作する場合...代わりに、ループ内のインデックスを使用し、最後のものかどうか毎回チェックします。最後のエントリの場合は、 "or"を追加しないでください。 –
名前の人は誰ですか? –
@AshBurlaczenko何らかの識別子である可能性があります。彼がクエリ(おそらくSQL)を構築しているようなものです。 –