Java hashmap:打印最后一个条目后不写逗号

时间:2015-08-27 15:31:00

标签: javascript java hashmap

我在Java中使用hashmap以格式(名称,大小)保存三对服务器,然后将此hashmap传递给Javascript。

在Javascript中,最后一个条目后没有逗号:

data: [
{
   name : "client3",
   y:23,
},
{
   name : "client1",
   y:245,
},
{
   name : "client2",
   y:23,
}]

所以我不知道如何使用HashMap迭代器在Java中删除这个逗号:

for (Map.Entry<String, String> entry : listClientSize.entrySet()) {
    String name = entry.getKey().toString();;
    String size = entry.getValue();
    out.println("name : \""+name+"\",");
    out.println("y:"+size+",");
    out.println("},");
}

有什么想法吗?

6 个答案:

答案 0 :(得分:2)

不是在循环的 end 处写逗号,而是在开头处写下来。与上次迭代相比,第一次迭代检查 更容易

boolean first = true;
for (Map.Entry<String, String> entry : listClientSize.entrySet()) {
    String name = entry.getKey().toString();;
    String size = entry.getValue();
    if (first)
        first = false;
    else
        out.println("},");
    out.println("{");
    out.println("name : \""+name+"\",");
    out.println("y:"+size);
}
out.println("}");

BTW:您错过了起始大括号{的打印,并在y值后面有逗号。

更新:由于用于处理第一次迭代的模式非常常见,并且操作非常简单(通常只是附加一个分隔符),我通常会将代码折叠为遵循(如果您有严格的编码标准,请不要这样做):

if (first) first = false; else out.println("},");

答案 1 :(得分:2)

您似乎正在创建JSON,因此请考虑使用适当的JSON解析器来生成结果。例如,使用gson库,您的代码可能看起来像

包含您要存储的单个信息的类

public class Server{
    private String name;
    private int value;
    public Server(String name, int value) {
        this.name = name;
        this.value = value;
    }
    //getters and setters
}

您可以使用此类,如:

List<Server> list = new ArrayList<>();
list.add(new Server("1", 245));
list.add(new Server("2", 23));
list.add(new Server("3", 23));

Gson gson = new GsonBuilder().setPrettyPrinting().create();
String json = gson.toJson(list);
System.out.println(json);

将生成:

[
  {
    "name": "1",
    "value": 245
  },
  {
    "name": "2",
    "value": 23
  },
  {
    "name": "3",
    "value": 23
  }
]

如果您绝对需要,可以在开始时添加data =

答案 2 :(得分:2)

如果可以使用Java 8,请使用StringJoiner

    final StringJoiner stringJoiner = new StringJoiner(",");

    Map<String,String> listClientSize = new HashMap<String,String>(){{
        put("client3","23");
        put("client1","245");
        put("client2","23");
    }};
    for (Map.Entry<String, String> entry : listClientSize.entrySet()) {
        String name = entry.getKey().toString();;
        String size = entry.getValue();
        stringJoiner.add(String.format("{name:\"%s\", y:%s}", name, size));
    }
    System.out.println(stringJoiner.toString());

答案 3 :(得分:1)

要删除y属性(对象中的最后一个属性)之后的逗号,只需执行以下操作:

for (Map.Entry<String, String> entry : listClientSize.entrySet()) {
        String name = entry.getKey().toString();;
        String size = entry.getValue();
        out.println("name : \""+name+"\",");
        out.println("y:"+size);
        out.println("},");
    }

要删除最后的逗号,而不是从for循环中打印,请构建一个字符串,然后使用substring剪掉for循环后的最后一个字符,然后打印字符串< / p>

答案 4 :(得分:1)

您可以尝试的一件容易的事情是累积字符串以在StringBuilder中打印,然后使用子字符串剥离最后一个逗号。它应该是这样的:

StringBuilder output = new StringBuilder();
for (Map.Entry<String, String> entry : listClientSize.entrySet()) {
        String name = entry.getKey();
        String size = entry.getValue();
        output.append("{name :\"").append(name).append("\", ");
        output.append("y: ").append(size).append("},");     
}
String toPrint = output.substring(1, output.size() - 1);
out.println(toPrint);

答案 5 :(得分:0)

您可能需要一种方法来判断它是否不是最后一个条目然后附加逗号。一种简单的方法是在每次迭代时保持计数器n n递增。如果counter!= hashmap size附加逗号