Форматирование LinkedHashMap - PullRequest
       21

Форматирование LinkedHashMap

0 голосов
/ 05 декабря 2018

Я пытаюсь переформатировать вывод 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());

токен - это мой LinkedHashMap изначения - это мой 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;
    }
}

Ответы [ 4 ]

0 голосов
/ 05 декабря 2018

Здравствуйте, если вы используете 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);

напечатанное значение будет выглядеть так, как вы ожидаете ура

0 голосов
/ 05 декабря 2018

Вместо вызова 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();
}
0 голосов
/ 05 декабря 2018

Мой однострочник (с достаточным кодом до и после, чтобы сделать полный пример):

    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
0 голосов
/ 05 декабря 2018

Здесь:

values.add(token.toString());

Вы вызываете toString() на вашем объекте карты.Который вызовет toString(), реализованный в базовом классе AbstractMap .Этот метод повторяет записи и добавляет фигурные скобки {} вокруг своих записей.

Таким образом, простой ответ: не вызывайте этот метод!

Вместо этого вы можете вручную выполнить entrySet () вашего объекта карты, извлечь ключи, значения и записать их в свой файл.

Помимо этого: вам нужна эта карта в первую очередь?Если token используется только для вызова toString(), для извлечения этих строк ... тогда вместо этого было бы более эффективно использовать StringBuilder.Просто вставьте свои строки в этого компоновщика и используйте его в конце.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...