格式化 LinkedHashMap
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 基础 class 中实现的 toString()
。该方法迭代条目,并在其条目周围添加 { } 大括号。
因此,简单的回答:不要调用那个方法!
相反,您可以手动迭代地图对象的 entrySet(),提取键、值,然后将它们写入您的文件。
除此之外:您首先需要那张地图吗?如果 token
仅用于调用 toString()
,以获取这些字符串......那么使用 StringBuilder 会更有效。只需将您的 strings 推入该构建器,并在最后使用它。
除了在地图上调用 toString
,您还可以使用以下方法:
String string = token.entrySet()
.stream()
.map(e -> e.getKey() + "=" + e.getValue())
.collect(Collectors.joining());
如果您不能使用 Java 8,那么您必须迭代并加入您的数据,使用 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
您好,如果您使用的是 java 8 或更高版本,您可以试试这个:
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);
打印的值将与您期望的一样
干杯
我正在尝试重新格式化 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 基础 class 中实现的 toString()
。该方法迭代条目,并在其条目周围添加 { } 大括号。
因此,简单的回答:不要调用那个方法!
相反,您可以手动迭代地图对象的 entrySet(),提取键、值,然后将它们写入您的文件。
除此之外:您首先需要那张地图吗?如果 token
仅用于调用 toString()
,以获取这些字符串......那么使用 StringBuilder 会更有效。只需将您的 strings 推入该构建器,并在最后使用它。
除了在地图上调用 toString
,您还可以使用以下方法:
String string = token.entrySet()
.stream()
.map(e -> e.getKey() + "=" + e.getValue())
.collect(Collectors.joining());
如果您不能使用 Java 8,那么您必须迭代并加入您的数据,使用 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
您好,如果您使用的是 java 8 或更高版本,您可以试试这个:
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);
打印的值将与您期望的一样 干杯