2011-05-02 18 views
14

我想一個方法是將循環任何類型的數組,並打印出來,我寫了下面的:通用的方法來打印所有的數組中的元素

public static <T> void printArray(T[] arr){ 
    for(T t: arr){ 
     System.out.print(t+" "); 
    } 
    System.out.println(""); 
} 

但它只適用於類數組,如果什麼我有一個char[]而不是Character[]int[]Integer[]代替,或者是有辦法的前手投呢?由於

+0

什麼t.toString(),而不是T + – Preston 2011-05-02 20:08:38

+2

不幸的是與Array.toString()只是調用Object.toString()和你會得到類似於[C @ e6f8730'的建議,我向JDK 7硬幣項目領導建議他解決這個問題,但我沒有把它賣給他。 ;) – 2011-05-02 20:13:50

+0

@Peter Lawrey很好的建議。他們的反對意見是什麼?每個人都可以很好地利用這個散列值? – Bozho 2011-05-02 20:21:03

回答

24

java.util.Arrays.toString(array)應該做的。

  • commons-lang也有 - ArrayUtils.toString(array)(但更喜歡JDK之一)
  • commons-lang允許自定義分隔符 - StringUtils.join(array, ',')
  • guava還允許分離器,並具有跳過空值的選項:Joiner.on(',').skipNulls().join(array)

所有這些返回String,然後您可以System.out.println(..)logger.debug(..)。請注意,如果數組元素以有意義的方式實現了toString(),則這些將爲您提供有意義的輸入。

最後兩個選項,唉,不具備原始陣列的支持,但是很好的選擇就知道了。

+1

不要重新發明輪子:) – slandau 2011-05-02 20:09:38

+0

Guava的Joiner只適用於* object *數組。對於基本數組,必須在com.google.common.primitives(如Chars.join()的join()方法:http://guava-libraries.googlecode.com/svn/trunk/javadoc/com/google/common /primitives/Chars.html) – 2011-05-02 20:21:29

+0

@eneveu這是在我的最後一段;) – Bozho 2011-05-02 20:23:15

0

你不能將基本數組傳遞給printArray()方法

+0

感謝您的回答,非常感謝。 – user685275 2011-05-03 00:33:05

1

你不能爲基本數組寫一個通用的定義。相反,你可以使用方法重載,寫每一個基本數組類型這樣的方法,

public static void printArray(int[] arr) 
public static void printArray(short[] arr) 
public static void printArray(long[] arr) 
public static void printArray(double[] arr) 
public static void printArray(float[] arr) 
public static void printArray(char[] arr) 
public static void printArray(byte[] arr) 
public static void printArray(boolean[] arr) 
+0

感謝您的回答,非常感謝。 – user685275 2011-05-03 00:32:52

相關問題