java - 格式化 LinkedHashMap

标签 java linked-list string-formatting 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());

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

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

相反,您可以迭代 entrySet()手动创建 map 对象,提取键、值并将其写入文件中。

除此之外:您首先需要那张 map 吗?如果 token 仅用于调用 toString() 来获取这些字符串...那么使用 StringBuilder 会更有效。只需将您的字符串插入该构建器,并最终使用它即可。

关于java - 格式化 LinkedHashMap,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53633909/

相关文章:

javascript - 如何使用 jsoup 发布 javascript 表单?

Java:原始数据类型数组不自动装箱

c++ - 从链表中删除节点(递归)

java - 为什么 toString 方法在这里不起作用?

javascript - 文本区域输出到页面的特殊格式创建与某些数据的链接

c# - 如何在C#中使用 “0”验证数字的输入项是否不是

java - SAX 解析器是否将所有数据保存在内存中?

使用 log4j 和 log4j.yaml 进行 java 日志记录

c++ - 嵌套的 STL 列表

R - 带有周-年 : week is lost when converting to Date format 的字符串