StefanE
StefanE

Reputation: 7630

Create formatted string from ArrayList

Consider following code:

    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);

My result here is (2134,3423,4234,343) as expected..

I do replace the last comma with the ending ) to get expected result. Is there a better way of doing this in general?

Upvotes: 10

Views: 26839

Answers (7)

DanM
DanM

Reputation: 121

Building off Mateusz's Java 8 example, there's an example in the StringJoiner JavaDoc that nearly does what OP wants. Slightly tweaked it would look like this:

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

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

Upvotes: 1

MrMeszaros
MrMeszaros

Reputation: 643

Since Java 8 you can also do:

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

Upvotes: 8

Rob Hruska
Rob Hruska

Reputation: 120286

You could use Commons Lang:

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

Alternatively, if you can't use external libraries:

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

Upvotes: 17

Aravind Yarram
Aravind Yarram

Reputation: 80176

How about this from google-guava

String joinedStr = Joiner.on(",").join(aList);

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

Upvotes: 2

Qwerky
Qwerky

Reputation: 18445

If you used an Iterator you could test hasNext() inside your loop to determine whether you needed to append a comma.

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(")");

Upvotes: 0

jzd
jzd

Reputation: 23629

You will have to replace the last comma with a ')'. But use a StringBuilder instead of adding strings together.

Upvotes: 2

m.edmondson
m.edmondson

Reputation: 30882

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

Perhaps?

Upvotes: -1

Related Questions