1

やあみんな誰かが私にこれらの文字列をコンマで連結する良い方法を教えてくれるかもしれない

基本的に、どのフォーム変数が選択されているかを示すヘッダー基準文字列を作成しています。値の間にコンマを入れて、ブレークタグを所定の位置に保持する必要があります...誰かがそれを行うためのより良い方法を見ることができますか?値だけがあればコンマは欲しくない

これは現在フォーマットされているように見えます:

ここに画像の説明を入力してください

protected final String getCriteriaHeader(MetricFilterCriteriaForm form)
{
    String filterCriteria = "<br/>";

    }
    if (form.isSacNone() || form.isSac1() || form.isSac2() || form.isSac3())
    {
        filterCriteria = filterCriteria + "SAC:";
    }
    if (form.isSacNone())
    {
        filterCriteria = filterCriteria + " NONE";
    }
    if (form.isSac1())
    {
        filterCriteria = filterCriteria + " 1";
    }
    if (form.isSac2())
    {
        filterCriteria = filterCriteria + " 2";
    }
    if (form.isSac3())
    {
        filterCriteria = filterCriteria + " 3";
    }
    if (form.isSac1() || form.isSac2() || form.isSac3())
    {
        filterCriteria = filterCriteria + "<br/>";
    }
    if (form.isRegularScheduleType() || form.isLotScheduleType() || form.isBatchScheduleType())
    {
        filterCriteria = filterCriteria + "Schedule Type:";
    }
    if (form.isRegularScheduleType())
    {
        filterCriteria = filterCriteria + " Regular";
    }
    if (form.isLotScheduleType())
    {
        filterCriteria = filterCriteria + " Lot";
    }
    if (form.isBatchScheduleType())
    {
        filterCriteria = filterCriteria + " Batch";
    }

    return filterCriteria;
}
4

5 に答える 5

3

文字列内の一連の値を区切り記号で連結するには、さまざまな方法があります。

StringBuilder を使用

コンマを使用して値を追加し、最後のコンマを手動で削除します。

StringBuilder sb = new StringBuilder();
if (/*condition1*/) {
    sb.add("A,"); // value with comma
}
if (/*condition2*/) {
    sb.add("B,");
}
sb.delete(sb.length()-1, sb.length()); // remove last character, which is the comma.
String result = sb.toString(); // get the result string.

グァバのジョイナーで

すべてを List に入れてJoinerを使用します。

List<String> list = Lists.newArrayList();
if (/*condition1*/) {
    list.add("A"); // no comma here
}
if (/*condition2*/) {
    list.add("B");
}
String result = Joiner.on(",").join(list); // use Joiner to join elements of the list.

Guava の代わりに、Apache Common Lang の StringUtils.Join があります。@Iswanto Sanの回答を参照してください。

于 2013-02-20T14:55:24.987 に答える
3

Apache Common LangのStringUtils.Joinを使用できます

例 :

protected final String getCriteriaHeader(MetricFilterCriteriaForm form)
{
    String filterCriteria = "<br/>";
    List<String> sacs = new ArrayList<String>();
    List<String> schedules = new ArrayList<String>();

    if (form.isSacNone() || form.isSac1() || form.isSac2() || form.isSac3())
    {
        filterCriteria = filterCriteria + "SAC:";
    }
    if (form.isSacNone())
    {
        filterCriteria = filterCriteria + " NONE";
    }
    if (form.isSac1())
    {
        sacs.add(" 1");
    }
    if (form.isSac2())
    {
        sacs.add(" 2");
    }
    if (form.isSac3())
    {
        sacs.add(" 3");
    }
    filterCriteria += StringUtils.join(saces, ",");
    if (form.isSac1() || form.isSac2() || form.isSac3())
    {
        filterCriteria = filterCriteria + "<br/>";
    }
    if (form.isRegularScheduleType() || form.isLotScheduleType() || form.isBatchScheduleType())
    {
        filterCriteria = filterCriteria + "Schedule Type:";
    }
    if (form.isRegularScheduleType())
    {
        schedules.add(" Regular");
    }
    if (form.isLotScheduleType())
    {
        schedules.add(" Lot");
    }
    if (form.isBatchScheduleType())
    {
        schedules.add(" Batch");
    }
    filterCriteria+=StringUtils.join(schedules, ",");

    return filterCriteria;
}
于 2013-02-20T14:55:38.653 に答える
1

StringBuilderを使用して文字列を作成できます。これは、単純な文字列連結よりも優れています。

StringBuilder sb = new StringBuilder();
if(XX) {
  sb.append("XX");
}
return sb.toString();

お役に立てれば :)

PS:StringBuilderはStringBufferよりも高速ですが、後者はスレッドセーフであることに注意してください。

編集

あなたの質問を読み直しましたが、有益なアドバイスを提供しましたが、うまく答えられないようです(IMHO)。私はあなたが何を必要としているのか正確にはわかりません。

于 2013-02-20T14:51:49.133 に答える
1

最初は、 を使用して String インスタンスを大量に作成しないようにしStringBuilderます。次に、条件をネストして処理を少し高速化し、構造を増やします。

protected final String getCriteriaHeader(MetricFilterCriteriaForm form)
{
    StringBuilder filterCriteria = new StringBuilder("<br/>");
    if (form.isSacNone() || form.isSac1() || form.isSac2() || form.isSac3())
    {
        filterCriteria.append("SAC:");
        if (form.isSacNone())
            filterCriteria.append(" NONE");
        if (form.isSac1() || form.isSac2() || form.isSac3())
        {
            if (form.isSac1())
                filterCriteria.append(" 1,");
            if (form.isSac2())
                filterCriteria.append(" 2,");
            if (form.isSac3())
                filterCriteria.append(" 3,");
            if(','==filterCriteria.charAt(filterCriteria.length-1) )
                filterCriteria.deleteCharAt(filterCriteria.length-1)
            filterCriteria.append("<br/>");
        }
    }
    if (form.isRegularScheduleType() || form.isLotScheduleType() || form.isBatchScheduleType())
    {
        filterCriteria.append("Schedule Type:");
        if (form.isRegularScheduleType())
            filterCriteria.append(" Regular,");
        if (form.isLotScheduleType())
            filterCriteria.append(" Lot,");
        if (form.isBatchScheduleType())
            filterCriteria.append(" Batch,");
        if(','==filterCriteria.charAt(filterCriteria.length-1) )
            filterCriteria.deleteCharAt(filterCriteria.length-1)
    }
    return filterCriteria.toString();
}

条件が 1 つだけ真である場合はelse if、のカスケードの代わりに使用することもできますif

于 2013-02-20T14:55:14.027 に答える
1

Listを使用して、次のものを叩くことをお勧めしStringBuilderます。

protected final String getCriteriaHeader(MetricFilterCriteriaForm form) {
        final StringBuilder stringBuilder = new StringBuilder();
        stringBuilder.append("<br/>");

        final List<String> sacList = new LinkedList<String>();
        if (form.isSacNone() || form.isSac1() || form.isSac2() || form.isSac3()) {
            stringBuilder.append("SAC: ");
        }
        if (form.isSacNone()) {
            sacList.add("NONE");
        }
        if (form.isSac1()) {
            sacList.add("1");
        }
        if (form.isSac2()) {
            sacList.add("2");
        }
        if (form.isSac3()) {
            sacList.add("3");
        }
        final Iterator<String> sacIter = sacList.iterator();
        while (sacIter.hasNext()) {
            stringBuilder.append(sacIter.next());
            if (sacIter.hasNext()) {
                stringBuilder.append(", ");
            }
        }
        if (form.isSac1() || form.isSac2() || form.isSac3()) {
            stringBuilder.append("<br/>");
        }
        final List<String> scheduleTypeList = new LinkedList<String>();
        if (form.isRegularScheduleType() || form.isLotScheduleType() || form.isBatchScheduleType()) {
            scheduleTypeList.add("Schedule Type: ");
        }
        if (form.isRegularScheduleType()) {
            scheduleTypeList.add("Regular");
        }
        if (form.isLotScheduleType()) {
            scheduleTypeList.add("Lot");
        }
        if (form.isBatchScheduleType()) {
            scheduleTypeList.add("Batch");
        }
        final Iterator<String> scheduleTypeIter = scheduleTypeList.iterator();
        while (scheduleTypeIter.hasNext()) {
            stringBuilder.append(scheduleTypeIter.next());
            if (scheduleTypeIter.hasNext()) {
                stringBuilder.append(", ");
            }
        }
        return stringBuilder.toString();
}
于 2013-02-20T14:57:10.357 に答える