2015-02-09 248 views
1

我想讓我的輸出顯示沒有括號。我覺得這是一件簡單的事情,但無法弄清楚。打印arraylist沒有括號

輸出看起來像這樣

22 ([1, 2, 11]) 
33 ([1, 3, 11]) 
44 ([1, 2, 4, 11, 22]) 
55 ([1, 5, 11]) 
66 ([1, 2, 3, 6, 11, 22, 33]) 
77 ([1, 7, 11]) 

但我想它已經顯示無括號,所以它看起來像這樣

22 (1, 2, 11) 
33 (1, 3, 11) 
44 (1, 2, 4, 11, 22) 
55 (1, 5, 11) 
66 (1, 2, 3, 6, 11, 22, 33) 
77 (1, 7, 11) 

這裏有一塊我的代碼

import java.util.ArrayList; 

public class Palindrome { 
    public static void main(String[] args) { 
     int e = 0; 
     // palindromic composite number 
     int drome = 0; 
     // starting int range 
     int start = 10; 
     // ending int range 
     int end = 10000; 
     for (int i = start; i <= end; i += 1) { 
      if (isPalindromic(i)) { 
       drome = i; 
       if (!isPrime(i)) 
        System.out.println(drome + " (" + getDivisors(drome) + ")"); 
      } 
     } 
    } 

    // gets gets the divsors and adds them to arraylist if divsor is a 
    // palindrome 
    public static ArrayList getDivisors(int number) { 
     ArrayList numbersDivisor = new ArrayList(); 
     int i = 0; 
     for (i = 1; i < number; i++) { 
      if (number % i == 0 && i != number && isPalindromic(i)) { 
       numbersDivisor.add(i); 
      } 
     } 
     return numbersDivisor; 
    } 
+0

將得到的'ArrayList'存儲在一個變量中。將調用'toString'的結果存儲在另一個'String'中。從這個「String」中修剪括號並使用它來打印它。 – 2015-02-09 04:35:45

+0

一個簡單的黑客就是用''「''替換所有的'['和']'字符'''replaceAll'](http://docs.oracle.com/javase/8/docs/api/java/lang /String.html#replaceAll-java.lang.String-java.lang.String-)。 'getDivisors(drome).toString()。replaceAll(「[\\ [\\]]」,「」);'但是這只是因爲你的數據結構不包含任何可能包含實數平方的字符串-bracket字符。這不是一個完全一般的解決方案。 – ajb 2015-02-09 04:40:31

回答

1

嘗試使用StringBuilder代替:

public static StringBuilder getDivisors(int number) { 
    StringBuilder numbersDivisor = new StringBuilder(); 
    int i = 0; 
    for (i = 1; i < number; i++) { 
     if (number % i == 0 && i != number && isPalindromic(i)) { 
      numbersDivisor.append(i).append(','); 
     } 
    } 
    if(0 < (i = numbersDivisor.length())) { 
     numbersDivisor.deleteCharAt(i - 1);//remove that last comma 
    } 
    return numbersDivisor; 
} 

OR

您可以在不是主()代替括號:

String divs = getDivisors(drome).toString().replace("\\[", "(").replace("\\]", ")"); 
System.out.println(drome + divs); 

OR

您可以嘗試通過@LuiggiMendoza給出的建議。

1

我認爲最簡單的解決辦法可能是修改方法返回一個String一樣,

public static String getDivisors(int number) { 
    StringBuilder sb = new StringBuilder(); 
    for (int i = 1; i < number; i++) { 
     if (number % i == 0 && i != number && isPalindromic(i)) { 
      if (sb.length() > 0) { 
       sb.append(", "); 
      } 
      sb.append(i); 
     } 
    } 
    return sb.toString(); 
} 

或者,你可以重寫從List隱含toString的結果(請編程的接口和請不要「T使用原始類型)等

​​

然後 如果){ 字符串str = getDivisors(綜合徵)的ToString()(isPrime(I!); str = str.substring(1,str.length() - 1); System.out.println(drome +「(」+ str +「)」); }

+1

您不能簡單地將一個'List '賦給一個'String'變量。你需要這樣做:'String str = getDivisors(drome).toString();'。 – 2015-02-09 04:47:22

0

System.out.println()方法使用toString()方法(內部深處)獲取作爲參數傳遞的任何對象的內容。 ArrayList繼承的類AbstractList繼承了AbstractCollection類,其中有java.lang.Object類的toString()方法被覆蓋。以下是toString()方法的默認實現AbstractCollection類:

public String toString() { 
    Iterator<E> i = iterator(); 
    if (! i.hasNext()) 
     return "[]"; 

    StringBuilder sb = new StringBuilder(); 
    sb.append('['); 
    for (;;) { 
     E e = i.next(); 
     sb.append(e == this ? "(this Collection)" : e); 
     if (! i.hasNext()) 
      return sb.append(']').toString(); 
     sb.append(", "); 
    } 
} 

創建一個新的類,它繼承了ArrayList類,並覆蓋toString()方法。讀取內嵌註釋的代碼:

public class BracketlessArrayList<E> extends ArrayList<E> { 

/** 
* For serialization.. ignore this 
*/ 
private static final long serialVersionUID = 1L; 

public String toString() { 
      Iterator<E> i = iterator(); 
      if (! i.hasNext()){ 
       //return "[]"; //line removed to avoid square brackets 
       return ""; 
      } 


      StringBuilder sb = new StringBuilder(); 
      //sb.append('['); //line removed to avoid square brackets 
      for (;;) { 
       E e = i.next(); 
       sb.append(e == this ? "(this Collection)" : e); 
       if (! i.hasNext()){ 
        //line removed to avoid square brackets 
        //return sb.append(']').toString(); 
        return sb.toString();       
       } 

       sb.append(", "); 
      } 
     } 
} 

現在修改getDivisors()方法是這樣的:

public static BracketlessArrayList getDivisors(int number) { 
    BracketlessArrayList numbersDivisor = new BracketlessArrayList(); 
    int i = 0; 
    for (i = 1; i < number; i++) { 
     if (number % i == 0 && i != number && isPalindromic(i)) { 
      numbersDivisor.add(i); 
     } 
    } 
    return numbersDivisor; 
} 

這會爲你做這項工作的正確方法。