从ArrayList创建格式化字符串

时间:2011-01-12 16:32:10

标签: java string

请考虑以下代码:

    ArrayList<Integer> aList = new ArrayList<Integer>();
    aList.add(2134);
    aList.add(3423);
    aList.add(4234);
    aList.add(343);

    String tmpString = "(";

    for(int aValue : aList) {
        tmpString += aValue + ",";
    }
    tmpString = (String) tmpString.subSequence(0, tmpString.length()-1) + ")";

    System.out.println(tmpString);

我的结果如预期那样是(2134,3423,4234,343)..

我将最后一个逗号替换为结尾)以获得预期结果。有没有更好的方法来做到这一点?

7 个答案:

答案 0 :(得分:16)

您可以使用Commons Lang

String tmpString = "(" + StringUtils.join(aList, ",") + ")";

或者,如果您不能使用外部库:

StringBuilder builder = new StringBuilder("(");
for (int aValue : aList) builder.append(aValue).append(",");
if (aList.size() > 0) builder.deleteCharAt(builder.length() - 1);
builder.append(")");
String tmpString = builder.toString();

答案 1 :(得分:5)

Java 8 以来,你也可以这样做:

ArrayList<Integer> intList = new ArrayList<Integer>();
intList.add(2134);
intList.add(3423);
intList.add(4234);
intList.add(343);

String prefix = "(";
String infix = ", ";
String postfix = ")";

StringJoiner joiner = new StringJoiner(infix, prefix, postfix);
for (Integer i : intList)
    joiner.add(i.toString());

System.out.println(joiner.toString());

答案 2 :(得分:2)

您必须使用')'替换最后一个逗号。但是使用StringBuilder而不是一起添加字符串。

答案 3 :(得分:2)

google-guava

的情况如何
String joinedStr = Joiner.on(",").join(aList);

System.out.println("("+JjoinedStr+")");

答案 4 :(得分:1)

建立Mateusz的Java 8示例,StringJoiner JavaDoc中的一个示例几乎可以满足OP的要求。略微调整它看起来像这样:

List<Integer> numbers = Arrays.asList(1, 2, 3, 4);

String commaSeparatedNumbers = numbers.stream()
     .map(i -> i.toString())
     .collect( Collectors.joining(",","(",")") );

答案 5 :(得分:0)

如果您使用了Iterator,则可以在循环中测试hasNext(),以确定是否需要附加逗号。

StringBuilder builder = new StringBuilder();
builder.append("(");

for(Iterator<Integer> i=aList.iterator(); i.hasNext();)
{
  builder.append(i.next().toString());
  if (i.hasNext()) builder.append(",");
}

builder.append(")");

答案 6 :(得分:-1)

for(int aValue : aList) {
    if (aValue != aList.Count - 1)
    {
          tmpString += aValue + ",";
    }
    else
    {
          tmpString += aValue + ")";
    }
}

也许?