【问题标题】:using the toString method to display information in an arraylist without brackets and commas使用 toString 方法在不带括号和逗号的数组列表中显示信息
【发布时间】:2011-09-09 07:49:30
【问题描述】:

我正在使用 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

注意需要删除的括号和逗号

【问题讨论】:

    标签: java arraylist tostring


    【解决方案1】:

    根本不要使用 toString()。它不适用于创建格式化的 UI 字符串。它是一个开发工具,而不是用户演示工具。

    对于对象表示具有可以同时满足这两个目的的简单接受格式的东西的情况,我将添加一个警告。 Java 原始包装器(如 Integer 和 Float)就是一个例子。其他简单的类(例如 2D 点)也可以在这方面发挥作用,但随着对象变得更加复杂,这很快就会分崩离析。

    要执行您正在尝试的操作,只需创建一个方法来进行显示并在该方法中进行格式化。

    【讨论】:

      【解决方案2】:

      你真的需要使用 toString() 方法吗? 否则你可以自己为每个数组构建字符串。

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

      【讨论】:

      • 您可能希望至少在值之间留出空间。
      • 当然,上面的 sn-p 显示了避免使用 toString() 打印数组内的字符串的最简单方法。可以尝试在打印每个成员后添加新行,就像 builder.append(value+"\n");
      【解决方案3】:

      尽量写得更易读。

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

      【讨论】:

        【解决方案4】:

        使用guava joiner,如

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

        【讨论】:

        • 您可能希望至少在值之间留出空间
        • @Peter,除非我读错了示例,否则我认为 OPer 不想要空间,因为这些值似乎以换行符终止。请参阅示例中以, Deposit 开头的行。
        • @Mike,公平点。我建议一个 toString 应该是一个有新行的行是一个坏主意。格式应该留给调用者。如果是这种情况,有些格式是由调用者完成的,有些是由被调用者完成的,这可能会引起混淆。
        • @Peter Lawrey,总的来说我同意。 toString 方法通常用于调试,为了便于调试,输出应该适合一行。但是有些对象是文本部分的表示——StringBuilder 就像用户输入的表示和负责呈现数据的对象一样。那些(半?)结构化的表示不应该有与调试用例相同的限制。
        • @Mike,您通常希望使用多种格式。也许toString 不是格式化输出的最佳位置。
        【解决方案5】:

        这个怎么样?

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

        【讨论】:

          【解决方案6】:

          修改“getTransaction()”返回的Object的“toString”方法!?

          【讨论】:

          • 那个对象似乎是ArrayList,所以我不认为这是一个选项。
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2021-08-27
          • 2022-01-10
          • 2022-10-13
          • 1970-01-01
          • 2020-06-23
          • 1970-01-01
          相关资源
          最近更新 更多