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快,但后者是线程安全的。

编辑

我重新阅读了您的问题,尽管我提供了有用的建议(恕我直言),但我似乎回答得不好。我不明白你到底需要什么。

于 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();
}

如果只有一个条件为真,您也可以使用else if代替级联的if.

于 2013-02-20T14:55:14.027 回答
1

我建议把东西打成 aList然后使用 a 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 回答