2011-10-21 44 views
7

Đây là một câu hỏi khá đơn giản. Khi bạn in ra một LinkedList, như vậy:Java: In LinkedList không có dấu ngoặc vuông?

System.out.println(list); 

It in nó ra, xung quanh danh sách trong dấu ngoặc vuông như thế này:

[thing 1, thing 2, thing 3] 

Có cách nào tôi có thể in nó ra mà không vuông dấu ngoặc vuông?

Trả lời

21

Có - lặp lại danh sách và in nó (bằng dấu phẩy sau mỗi phần tử, nhưng phần tử cuối cùng). Tuy nhiên, có utils để giúp:

Guava:

String result = Joiner.on(", ").join(list); 

commons-lang:

String result = StringUtils.join(list, ", "); 

Và một lưu ý: không dựa vào phương pháp .toString() của bất kỳ đối tượng. Nó không có nghĩa là để hiển thị các đối tượng cho người dùng, hoặc được sử dụng như một định dạng được xác định trước - nó có nghĩa là chủ yếu cho các mục đích gỡ lỗi.

+1

Điều này cần +2 cho các tiện ích và bit 'toString()'. –

+0

Nhập khẩu cho StringUtils là gì? – Blackvein

+0

Nevermind Tôi đã tìm thấy nó :) Cảm ơn các bạn! – Blackvein

5

Một câu trả lời nhanh chóng-và-bẩn là:

String s = list.toString(); 
System.out.println(s.substring(1, s.length()-1)); 
+2

Vì bạn bao gồm các "nhanh chóng và dơ bẩn" từ chối trách nhiệm, tôi sẽ không downvote câu trả lời của bạn. Điều đó nói rằng, đây chính xác là loại công cụ chúng ta nên * khuyến khích * các nhà phát triển khác làm. –

0

này là việc thực hiện mặc định của toString() trên LinkedList. Bạn có thể mở rộng LinkedList để cung cấp việc triển khai hoặc sử dụng thành phần của riêng bạn và chỉ cần triển khai giao diện java.util.List.

public class MyLinkedList<E> implements List<E> 
{ 
    private final List<E> delegate; 

    public MyLinkedList(List<E> list) 
    { 
     delegate = list; 
    } 

    /** 
    * @return see overriden class or implemented interface 
    * @see java.lang.Object#toString() 
    */ 
    @Override 
    public String toString() 
    { 
     return "My special toString() method"; 
    } 

    // implement rest of the java.util.List interface 
2

Bạn có thể phân lớp LinkedList và ghi đè lên nó toString() phương pháp, nhưng điều đó dường như một chút quá mức. Thay vào đó, hãy lặp qua các phần tử của nó và xây dựng một String với một số StringBuilder hoặc StringBuffer (nếu đồng thời là một vấn đề).

Lưu ý:
Tôi đề nghị bạn không làm theo câu trả lời cung cấp bởi @Sean Owen, vì đó là thực hiện phụ thuộc và do đó, mong manh.

0

Modified từ AbstractCollection.java:

/* 
    * @return a string representation of a collection 
    */ 
    public static final String collectionToString(Collection c) { 
     Iterator<E> it = c.iterator(); 
     if (! it.hasNext()) 
      return ""; 

     StringBuilder sb = new StringBuilder(); 
     for (;;) { 
      E e = it.next(); 
      sb.append(e == c ? "(this Collection)" : e); 
      if (! it.hasNext()) 
       return sb.toString(); 
      sb.append(',').append(' '); 
     } 
    } 
0
StrBuilder builder = new StrBuilder(); // apache commons lang. 
for (Object object : yourList) 
{ 
    builder.appendSeperator(", "); 
    builder.append(object.toString()); 
} 

System.out.println(builder.toString()); 
0

Bạn có thể lấy các Chuỗi trả về bởi phương pháp .toString() và loại bỏ các ký tự đầu tiên và cuối cùng, hoặc làm cho lớp danh sách của riêng bạn và ghi đè lên các phương pháp .toString() để lặp qua danh sách và in các phần tử không có dấu ngoặc đơn. Hoặc bạn có thể làm điều đó với tư cách là một lớp vô danh như:

List<String> list = new List<String>() { 
    public String toString() { 
     // Custom To String Stuff Here 
    } 
}; 

Và tất nhiên tôi quá chậm.

0

Nếu bạn đang vào groovy, không cần phải nhập khẩu bất cứ thứ gì, chỉ cần làm:

list = ["thing 1", "thing 2", "thing 3"]  
println list.collect { i -> "$i" }.join(', ') 

điều 1, điều 2, điều 3


Tương tự với bộ sưu tập Bản đồ:

map = [I:"James Bond", love:"rock N roll", id:"007"] 
println map.collect { k,v -> "$k = $v" }.join('\n') 

I = James Bond

cuộn tình yêu = đá N

id = 007

Các vấn đề liên quan