【问题标题】:How I can create a complex string in Java efficiently?如何有效地在 Java 中创建复杂的字符串?
【发布时间】:2011-08-18 20:20:50
【问题描述】:

我想创建一个如下所示的字符串:

 "[{"product_id":"123","name":"stack"},{"product_id":"456","name":"overflow"}]"

我在两个数组中有product_idname。如何最有效地创建上述类型的字符串?

【问题讨论】:

标签: java


【解决方案1】:

这看起来像 JSON。您应该使用 JSON 库。

那里有很多(见this page,几乎滚动到最后),但是

是我会使用的。

【讨论】:

  • 很好的答案,样品和一切。
  • +1 @Sean Patrick Floyd,关于使用库以及使用哪个库的好建议 - 如果将来需要添加新字段,这将提供灵活性和代码清晰度,具有更复杂的层次关系等。
【解决方案2】:

如果你已经有一个List<ProductInformation>,那么默认的带有exclude的flexjson序列化会给你字符串:

String jsonResult = new JSONSerializer().exclude("*.class").serialize(listOfProductInformation);

关于性能,最好的办法是使用一个好的分析器来查看整个应用程序。这将识别您真正的热点/瓶颈,如果事实证明这个序列化过程是一个热点,您可以像@Ali 提到的那样花时间进行调整,并通过分析器或性能测试工具运行它来衡量影响。

【讨论】:

    【解决方案3】:

    您可能想看看 Java 字符串格式化程序: http://download.oracle.com/javase/6/docs/api/java/util/Formatter.html

    【讨论】:

      【解决方案4】:

      我假设您有 2 个数组,一个包含 product_id,另一个包含值,并且这两个数组的顺序都正确。

      我将创建我自己的 java 对象 (POJO),它有两个字段 product_idname 然后使用你的两个数组并创建一个 POJO 数组(或列表),每个 POJO 包含 product_id 和名称。然后我会使用 Jackson 或 Gson 来创建我的 JSON。

      这些库为您提供了 Java 对象的 JSON 表示,因此在这种情况下,您必须确保您有一个包含 product_idname 的对象列表甚至对象数组。

      如果您坚持以硬方式(或不使用外部库方式)进行操作,那么我将创建一个模板字符串并在其上反复调用替换并将其添加到 StringBuffer。如果字符串可能非常大,则 StringBuffer 很重要。比如:

      String template = "{\"product_id\":\"productId\",\"name\":\"productName\"}";
      StringBuffer result = new StringBuffer("[");
      
      for(int i=0; i<myProductArray.length; i++){
         String temp = template.replace("productId",myProductArray[i]);
         temp = temp.replace("productName",myNameArray[i]);
         if(result.length() > 1)
            result.append(",");
         result.append(temp);
      }
      result.append("]");
      return result.toString();
      

      如果您可以将 template String 替换为 StringBuffer 并直接对其进行操作,那么对于大型字符串而言,这将产生大量不同的性能。

      问候,

      【讨论】:

        猜你喜欢
        • 2022-12-17
        • 2012-10-05
        • 2010-10-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-11-25
        • 2020-10-09
        • 1970-01-01
        相关资源
        最近更新 更多