2011-10-21 3 views
7

이것은 매우 간단한 질문입니다. 때 그렇게처럼 LinkedList의를 인쇄 :Java : 대괄호없이 LinkedList를 인쇄 하시겠습니까?

System.out.println(list); 

을 그것은이 같은 대괄호 목록 주변, 그것을 밖으로 인쇄 :

[thing 1, thing 2, thing 3] 

을 나는 사각형없이 인쇄 할 수있는 방법이 있나요 괄호?

답변

21

예 - 목록을 반복하여 인쇄하십시오 (각 요소 다음에 쉼표가 붙은 있지만 마지막 요소). 그러나 유틸 도움이 있습니다 :

Guava :

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

commons-lang :

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

그리고 하나의 참고 사항 : 모든 개체의 .toString() 방법에 의존하지 않습니다. 객체를 사용자에게 표시하거나 미리 정의 된 형식으로 사용하기위한 것이 아니라 주로 디버깅 용도로 사용됩니다.

+1

이 유틸리티에는 +2가 필요하고'toString() '비트가 필요합니다. –

+0

StringUtils의 가져 오기는 무엇입니까? – Blackvein

+0

Nevermind 발견 : 감사합니다! – Blackvein

5

더러운 빠른과 대답은 다음과 같습니다

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

는 "신속하고 더러운"면책 조항을 포함하기 때문에, I 당신의 대답을 하향 회하지 않을 것입니다. 즉, 이것은 정확히 우리가 다른 개발자가하지 말아야 할 물건입니다. –

0

이 LinkedList의에 있으며, toString()의 기본 구현입니다. LinkedList를 확장하여 자신 만의 구현을 제공하거나 컴포지션을 사용하고 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

당신은 LinkedList를 서브 클래 싱하고 toString() 메소드의 오버라이드 (override)하지만, 그건 좀 지나친 것 같다 수 있습니다. 대신 요소를 반복하고 StringBuilder 또는 StringBuffer (동시성이 문제가되는 경우) 중 하나로 String을 구성하십시오.

참고 : 나는 그 구현에 의존하기 때문에, 깨지기 쉬운 이후 당신이 @Sean Owen에서 제공하는 답을 따르지 않는 것이 좋습니다
.

0

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

당신은 .toString() 메소드에 의해 반환되는 문자열을 잡고 첫 번째와 마지막 문자를 제거하거나 자신의 목록 클래스를 만들고 통해 반복하는 .toString() 방법을 대체 할 수 있습니다 목록을 작성하고 괄호없이 요소를 인쇄하십시오.

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

을 물론 내가 너무 느린 해요 : 또는 당신은 같은 익명의 클래스로 그것을 할 수 있습니다.당신이 끝내에 경우

0

, 그냥 이렇게 아무것도 가져올 필요가 없습니다 :

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

일 1 일 2 일 3


지도 수집과 동일 함 :

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

I = 제임스 본드

사랑 = 바위 N 롤

ID = 007