2017-04-12 262 views
0

guys我想知道如何從數組中刪除多餘的逗號和空格?當我運行該程序時,它會給我{1,2,3,4,5,}。我想要的是 {1,2,3,4,5}。主要必須保持不變。 PrintArray方法是我需要幫助的一個方法。如何刪除數組中的最後一個逗號和空格? Java

參照重複問題陳述。 這是不同的,因爲它要求用戶輸入數字並相應地打印數組。這不是一個重複的問題。

public static void printArray(int[] myArray) 
    { 

     System.out.print("["); 
     for(int i = 0; i < myArray.length; i++) 
     { 
      myArray[i] = i + 1; 
      System.out.print(myArray[i] + ", "); 
     } 
     System.out.println("]"); 
    } 
} 
+1

可以打印除了最後一個所有元素,然後打印的最後一個元素seperately – Meccano

+0

截斷最後3個字符,然後添加「]」回來。或者更好的辦法是,不要盲目追加'「,」',檢查'myArray'的長度和'i'的值,以確定是否需要追加'「,」'。 – WOUNDEDStevenJones

+0

我也有時在'StringBuilder'中構建輸出,然後只刪除最後一個空格和逗號。 'StringBuilder'只是一個'char []',所以從最後刪除兩個字符很容易。由此產生的代碼非常緊湊和高效。 – markspace

回答

5

不要打印它在第一個地方。在字符串前面打印逗號,並且僅在i > 0時打印。

public static void printArray(int[] myArray) 
{ 

    System.out.print("["); 
    for(int i = 0; i < myArray.length; i++) 
    { 
     myArray[i] = i + 1; 
     if (i > 0) 
     { 
      System.out.print(", "); 
     } 
     System.out.print(myArray[i]); 
    } 
    System.out.println("]"); 
} 
2

我將修改它是這樣(打印下一個項目前的逗號,對於指數> 0)

System.out.print("["); 
for(int i = 0; i < myArray.length; i++) { 
    myArray[i] = i + 1; 
    System.out.print(((i > 0) ? ", " : "") + myArray[i]); 
} 
System.out.print("]"); 

或者,在Java 8,

System.out.println(
    "[" + 
    Arrays.stream(array) 
     .mapToObj(String::valueOf) 
     .collect(Collectors.joining(", ")) 
    + "]" 
); 
+0

'Collections.asList'不適用於基元類型的數組。您可能想使用'Stream.of'或'Arrays.stream'來代替。 – Pshemo

+0

對,我正在考慮'Arrays.asList'(沒有'Collections.asList'這樣的東西),而輸入它。呵呵:)謝謝!修訂。 :) – Gabe

+0

其實我也在考慮'Arrays.asList'問題依然存在。看一看。如果你有'int [] array = {1,2}',並且你使用'Arrays.asList',你會得到'List ',它將包含一個元素,數組本身。你不會得到'List '(因爲泛型不能是原語)也不''List '(因爲自動裝箱只適用於原始類型,但*任何*數組不是原始類型,甚至是'int []')。 – Pshemo

4

的簡單的方法來做到這一點只是使用Arrays.toString

public static void printArray(int[] myArray) 
{ 
    System.out.print(Arrays.toString(myArray)); 
} 

注意這會打印括號而不是大括號。在完整的利益,如果你這樣做自己實現,不要忘記檢查數組中除了像其他長的邊界條件是null = 0

下面是使用StringBuilder,在這裏我只是一直的例子在檢查null並且長度= 0之後,刪除最後兩個字符。如果要爲列表/數組中的每個項目計算一個非常複雜的字符串,這比複製代碼以使每個項目在循環外部更容易,並且可以比每次通過循環檢查i==array.length-1稍快。

public class MyArraysToString 
{ 

    public static void main(String[] args) 
    { 
     int[] test = { 8, 7, 6, 5, 4, }; 
     printArray(test); 
     System.out.println(myToString(null)); 
     System.out.println(myToString(new int[0])); 
     System.out.println(myToString(test)); 
    } 

    public static void printArray(int[] myArray) 
    { 
     System.out.println(Arrays.toString(myArray)); 
    } 

    public static String myToString(int[] a) { 
     if(a == null) return "null"; 
     if(a.length == 0) return "{}"; 
     StringBuilder sb = new StringBuilder(); 
     sb.append('{'); 
     for (int i = 0; i < a.length; i++) { 
     sb.append(a[i]); 
     sb.append(", "); 
     } 
     sb.setLength(sb.length()-2); 
     sb.append('}'); 
     return sb.toString(); 
    } 
} 
+0

注意;相當混亂,而不是僅僅打印數組OP的代碼也會初始化它。 –

+0

哦,OP的代碼。是的,這有點奇怪。 – markspace

+0

最初的代碼有'myArray [i] = i + 1;'這將會做一些不同於你的代碼的東西。恕我直言,你的代碼更有意義,它只是不會做同樣的事情。 –