2011-06-06 87 views
1

我正在使用toString方法在數組列表中顯示數據。我怎樣寫的代碼,以便它顯示了不帶信息的[,]在我的信息使用toString方法在無括號和逗號的數組列表中顯示信息

看到下面的代碼:

case 6: 
      System.out.println("Enter an account number to view the transactions of the account"); 
      number=keyboard.nextLong(); 
      found=false; 
      try{ 
       for(int i=0;i<aBank.getAccounts().size();i++){ 

       if(aBank.getAccounts().get(i).getAccountNumber().compareTo(number)==0){ 
        found=true; 
        System.out.println("Account " + number + ":\tStart Balance: " +money.format(aBank.getAccounts().get(i).getStartBalance())); 
        System.out.println(aBank.getAccounts().get(i).getTransaction().toString()); 
        System.out.println("Ending Balance :" +money.format(aBank.getAccounts().get(i).getBalance())); 
       } 
       } 
      } 

     catch (Exception e){ 
      System.out.println("Unable to process request.\n" +e.getMessage()); 
     } 
      break; 

這是輸出:

Account 1: Start Balance: $1000.00 
[Deposit 1 6/6/2011 $500.00 
, Deposit 2 6/6/2011 $489.00 
, Deposit 3 6/6/2011 $262.00 
, Withdrawal 4 6/6/2011 $897.00 
, Withdrawal 5 6/6/2011 $56.32 
, Withdrawal 6 6/6/2011 $78.24 
] 
Ending Balance :$1219.44 

通知括號和逗號需要刪除

回答

1

修改「getTransaction()」返回的Object的「toString」方法!

+0

該對象似乎是'ArrayList',所以我不認爲這是一個選項。 – 2011-06-06 13:54:39

1

這是怎麼回事?

List<String> list = ArrayList<String>(); 
String asString = list.toString().replaceAll("^\\[", "").replaceAll("\\]$", "").replace(",", ""); 
1

使用guava joiner

Joiner.on("").join(
    aBank.getAccounts().get(i).getTransaction()) 
+0

你可能想要至少在值 – 2011-06-06 16:43:54

+0

@Peter之間的空格,除非我讀錯了例子,我不認爲OPer想要空間,因爲值似乎以換行符結束。請參閱示例中以',Deposit'開頭的行。 – 2011-06-06 16:54:52

+0

@Mike,公平點。我會建議一個toString應該是一行有新行是一個壞主意。格式應該留給調用者。如果是這種情況,一些格式是由調用者完成的,另一些則由被調用者完成,這很可能導致混淆。 – 2011-06-06 17:02:02

2

你真的需要使用toString()方法?否則,你可以自己爲每個數組建立字符串。

tmpArray = aBank.getAccounts().get(i).getTransaction(); 
StringBuilder builder = new StringBuilder(); 
for (String value : tmpArray) { 
    builder.append(value); 
}  
System.out.println(builder.toString()); 
+0

您可能希望至少在兩個值之間留出空間。 – 2011-06-06 16:43:33

+1

當然,上面的代碼片段顯示了避免toString()打印數組內字符串的最簡單方法。 可以嘗試在每個成員打印後添加新行,就像 builder.append(value +「\ n」); – AlfonsSocken 2011-06-06 18:09:36

1

試着寫出更具可讀性。

try { 
    for(BankAccount ba : aBank.getAccounts()) { 
     if(ba.getAccountNumber().equals(number)) { 
     found=true; 
     System.out.println("Account " + number + ":\tStart Balance: " 
     +money.format(ba.getStartBalance()));     
     for (Object tr : ba.getTransaction()) { 
      System.out.println(tr); 
     } 
     System.out.println("Ending Balance :" +money.format(ba.getBalance())); 
     } 
     } 
} 
3

根本不要使用toString()。它不是用來創建格式化的UI字符串。它是一個開發人員工具,而不是用戶演示工具。

我會添加一個警告的情況下,對象表示的東西與一個簡單的接受格式,可以用於兩個目的。 Java原始包裝(如Integer和Float)就是一個例子。其他簡單的類如2D點也可以在這方面起作用,但隨着對象變得越來越複雜,這種類很快就會崩潰。

要做你正在嘗試的,只是創建一個方法來做你的顯示,並在該方法中進行格式化。

相關問題