我在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("},");
}
有什么想法吗?
答案 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附加逗号