Formatting a LinkedHashMap



我正在尝试重新格式化LinkedHashMap的输出,以排除逗号和大括号。

以下是我的看跌期权:

token.put("[Server.Protocol]", url.getProtocol() + "n");
token.put("[Server.hostName]", url.getHost() + "n");
token.put("[Server.Port]", url.getPort() + "n");
values.add(token.toString());

token是我的LinkedHashMap,values是我的LinkedList。

这是我的输出:

{[Server.Protocol]=https
, [Server.Name]=myserver
, [Server.Port.HTTPS]=123
}

这是我想要的:

[Server.Protocol]=https
[Server.hostName]=myserver
[Server.Port]=123

这是我的打印方法:

private void webconfigToINI() throws IOException {
File fout = new File(propFile);
try {
FileOutputStream fos = new FileOutputStream(fout, true /* append */);
writer = new PrintWriter(fos);
if (fos.getChannel().size() == 0)
writer.print("[Code]n");
for (String value : values) {
//writer.print(value.substring(1, value.length()-1));
writer.print(value);
}
// writer.print("[Code]n");
writer.flush();
writer.close();
fos.close();
} catch (Exception e) {
throw e;
}
}

此处:

values.add(token.toString());

您正在对地图对象调用toString()。它将调用在AbstractMap基类中实现的toString()。该方法迭代条目,并在其条目周围添加{}大括号。

因此,简单的答案是:不要调用那个方法!

相反,您可以手动迭代映射对象的entrySet((,提取键、值,并将它们写入文件。

除此之外:你首先需要那张地图吗?如果token仅用于调用toString(),则要获取这些字符串。。。那么使用StringBuilder会更有效率。只需将字符串推入该生成器,并最终使用它。

不用在地图上调用toString,您可以使用以下命令:

String string = token.entrySet()
.stream()
.map(e -> e.getKey() + "=" + e.getValue())
.collect(Collectors.joining());

如果您不能使用Java8,那么您必须使用entrySet()迭代并连接从地图检索数据的数据,如下代码所示:

String string = "";
for (Map.Entry<String, String> value: token.entrySet()) {
string = string + value.getKey() + "="+value.getValue();
}

我的一行代码(前后有足够的代码来制作一个完整的示例(:

LinkedHashMap<String, String> token = new LinkedHashMap<>();
token.put("[Server.Protocol]", "https");
token.put("[Server.hostName]", "myserver");
token.put("[Server.Port]", "123");
String value = token.entrySet().stream().map(Map.Entry::toString).collect(Collectors.joining("n"));
System.out.println(value);

输出:

[Server.Protocol]=https
[Server.hostName]=myserver
[Server.Port]=123

你好,如果您使用的是java8或更高版本,您可以尝试以下操作:

LinkedHashMap<String, String> token = new LinkedHashMap<>();
token.put("[Server.Protocol]", "https" + "n");
token.put("[Server.hostName]", "myserver" + "n");
token.put("[Server.Port]", "8080" + "n");

String val = token.entrySet().stream().map(k -> k.getKey()+ "="+ 
k.getValue()).collect(joining(""));
System.out.println(val);

打印的值将与您期望的值类似欢呼

相关内容

  • 没有找到相关文章

最新更新