打印没有括号的arraylist

时间:2015-02-09 04:34:14

标签: java

我试图让我的输出显示没有括号。我觉得这是一件简单的事情,但却无法理解。

输出看起来像这样

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;
    }

3 个答案:

答案 0 :(得分: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

您可以在main()中替换括号:

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

OR

您可以尝试@LuiggiMendoza提供的建议。

答案 1 :(得分: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();
}

或者,您可以从toString重写隐式List的结果(请编程到界面,请不要使用原始类型),如

public static List<Integer> getDivisors(int number) {
    List<Integer> al = new ArrayList<>();
    for (int i = 1; i < number; i++) {
        if (number % i == 0 && i != number && isPalindromic(i)) {
            al.add(i);
        }
    }
    return al;
}

然后     if(!isPrime(i)){         String str = getDivisors(drome).toString();         str = str.substring(1,str.length() - 1);         System.out.println(drome +&#34;(&#34; + str +&#34;)&#34;);     }

答案 2 :(得分:0)

System.out.println()方法使用toString()方法(深入内部)为作为参数传递的任何对象打印内容。 ArrayList类继承AbstractList继承AbstractCollection类,其中java.lang.Object类的toString()方法被覆盖。以下是AbstractCollection类中的toString()方法的默认实现:

 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;
}

那将以正确的方式为你完成工作。