【问题标题】:How to merge an array of objects into a single formatted String如何将对象数组合并为单个格式化字符串
【发布时间】:2014-03-14 15:19:32
【问题描述】:

过去 2 小时我一直在寻找这个答案,但没有运气,所以我现在发布我的问题。很抱歉,如果它与已经问过的类似,但我无法从已经回答的内容中得到明确的答案。

这里是:

我正在做一个学校项目,我们在其中读取“计算机”对象的文本文件(这种形式共有 8 个字段:manufacturer:model:memory:diskMemory:CPU:opticalDrive:OSVersion:RetailPrice) 读取文件后,您应该使用接受所有上述参数(分隔)的构造函数来分隔字段并构造计算机对象数组,并将它们的引用存储在数组的每个位置。

这是我的问题所在: 然后显示一个菜单,用户选择几个选项,最简单的就是在 JOPtionPane 上以如下形式显示计算机对象列表:

Manufacturer1     model1     memory1     disk1     CPU1 optical1     OS1     retailPrice1
Manufacturer2     model2     memory2     disk2     CPU2 optical2     OS2     retailPrice2

以此类推,直到完成数组。我无法弄清楚如何将对象数组压缩为上述形式的单个字符串。 Computer 类对每个字段都有一个 getMethod ,我只是无法让它们以这种方式对齐。它必须在简单的 .INFORMATION_MESSAGE 类型的 JOPtionPane 上。如果你们都需要查看计算机类代码,请告诉我,我可以发布它。这是我第一次在这个网站上发帖,如果形式不当,我深表歉意。

非常感谢您的帮助, 鲍勃

编辑: 输出应该是这样的: http://i229.photobucket.com/albums/ee38/Yukijin-Uchiha/ScreenShot2014-03-14at113759AM_zps05b5dbb5.png

【问题讨论】:

  • 不确定您是否考虑将其作为 json 字符串返回?谷歌中有一个名为“gson”的库,非常易于使用。

标签: java arrays string swing


【解决方案1】:

如果你正确地实现了ComputertoString() 函数,你应该得到你想要的。例如:

public class Computer  {
   public String toString()  {
      return  (new StringBuilder(getManufacturer()).append(":").
         append(getModel()).append(":").
         append(getMemory()).append(":").
         append(getDiskMemory()).append(":").
         append(getCPU()).append(":").
         append(getOpticalDrive()).append(":").
         append(getOSVersion()).append(":").
         append(getRetailPrice()).
      toString();
   }
}

然后调用它

String computerObjAsString = aComputerInstance.toString();

使用Computer 对象的数组来做到这一点:

StringBuilder outBldr = new StringBuilder();
for(Computer cmptr : anArrayOfComputers)  {
   outBldr.append(cmptr).append(System.getPropetry("line.separator", "\r\n"));
}
System.out.println(outBldr);

【讨论】:

  • 或许用StringBuilder类代替+":" +
  • 我不应该更改我的 Computer 类中的 toString 方法,这是问题所在。我还需要每个字段之间有一定数量的空格。我试图在问题中输入它,但它不会让格式保持不变。
【解决方案2】:

您应该寻找覆盖计算机对象中的toString() 方法以包含您想要打印的详细信息。然后,对于数组中的每个 Computer 对象,调用 <object name>.toString() 以显示相应的信息。

public class Computer {
   private String name;
   private String type;

   public Computer(String n, String t) {
       this.name = n;
       this.type = t;
   }

   public String toString() {
       return "Name: " + this.name + " Type: " + this.type;
   }
   public static void main(String[] args) {
      Computer c = new Computer("atari","old-school");
      System.out.println(c.toString());
   }
}

【讨论】:

  • 查看顶部的已编辑帖子以查看输出本身的外观。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-05-22
  • 2015-12-13
  • 1970-01-01
  • 2016-04-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多