Пытаюсь напечатать с помощью String.присоединиться, но это не работает

#java #string

#java #строка

Вопрос:

Я пытаюсь распечатать эти ключи из приведенного ниже кода. Когда я использую String .join выводит их не через запятую и пробел, а как одно слово. Не уверен, что я делаю не так.

 String[] words = scanner.nextLine().toLowerCase().split(" ");

LinkedHashMap<String, Integer> count = new LinkedHashMap<>();


for (int i = 0; i < words.length; i  ) {

    Integer occurrences = count.get(words[i]);
    if (occurrences == null) {
        occurrences = 0;
    }
    count.put(words[i], occurrences   1);
}
for (Map.Entry<String, Integer> entry : count.entrySet()) {
    if (entry.getValue() % 2 != 0) {
        System.out.print(String.join(", ", entry.getKey()));
    }
}
  

}
}

Комментарии:

1. enty.getKey() возвращает единицу String . Если вы рассматриваете join(a, b) функцию и передаете только a , вы получаете только a . Какого поведения вы ожидали?

Ответ №1:

 *     String message = String.join("-", "Java", "is", "cool");
*     // message returned is: "Java-is-cool"
  

Выше приведена цитата из Java doc of String.join method . Первым аргументом является ‘разделитель’. Поскольку entry.getKey() возвращает только одну строку, нет смысла добавлять туда разделитель «запятая». Это ожидаемое поведение.

Возможно StringJoiner , здесь будет больше выбора.

Ответ №2:

String.join Метод в вашем коде выполняется для каждого слова по отдельности. Сначала вам нужно собрать все слова (например, внутри a ArrayList ), а затем выполнить выполнение Strin.join(", ", <your list object>) .