2015-02-09 144 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; 
} 

这会为你做这项工作的正确方法。