#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>)
.