2011-01-12 30 views
8

Hãy xem xét sau đây:Tạo chuỗi định dạng từ ArrayList

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

kết quả của tôi ở đây là (2134,3423,4234,343) như mong đợi ..

tôi làm thay dấu phẩy cuối cùng với kết thúc) để có được kết quả mong đợi. Có cách nào tốt hơn để làm điều này nói chung?

Trả lời

15

Bạn có thể sử dụng Commons Lang:

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

thư viện Ngoài ra, nếu bạn không thể sử dụng bên ngoài:

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

Tôi thích phương pháp tiếp cận Commons Lang là tốt, đặc biệt là như tôi có nó như là một phụ thuộc trong tất cả các dự án anyway. –

+0

Tôi thường kết thúc bằng cách sử dụng nó cho một lý do này hay cách khác là tốt. Không có lý do để phát minh lại bánh xe trừ khi bạn có những ràng buộc cụ thể hạn chế bạn sử dụng các thư viện bên ngoài. Một số thư viện Apache Commons có nhược điểm của họ khi nói đến các bộ sưu tập và Generics, nhưng StringUtils là khá đơn giản. –

+0

Giải pháp rất gọn gàng! Tôi biết phải có một cách để làm điều này trong một lớp lót .. Và các StringUtils lib gần như là tiêu chuẩn để bao gồm anyway. – StefanE

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

Có lẽ?

+0

aList.size() là đúng. – pringlesinn

2

Bạn sẽ phải thay thế các dấu phẩy cuối cùng với một ')'. Nhưng sử dụng một StringBuilder thay vì thêm các chuỗi với nhau.

2

Làm thế nào về vấn đề này từ google-guava

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

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

Nếu bạn sử dụng một Iterator bạn có thể kiểm tra hasNext() bên trong vòng lặp của bạn để xác định xem bạn cần phải thêm một dấu phẩy.

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

Kể từ Java 8 bạn cũng có thể làm:

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

Xây dựng tắt Java 8 dụ Mateusz 's, có một ví dụ trong javadoc StringJoiner rằng gần làm những gì OP muốn. Hơi chỉnh sửa nó sẽ trông như thế này:

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

String commaSeparatedNumbers = numbers.stream() 
    .map(i -> i.toString()) 
    .collect(Collectors.joining(",","(",")")); 
Các vấn đề liên quan