Пояснение
A StringJoiner
не предлагает методы append
и capitalize
, поэтому вы получите ошибку.Проверьте документацию .
. * Результат .
должен быть добавлен к результату sj.toString()
, то есть String result = sj.toString() + ".";
.Заглавная буква должна быть сделана в первом слове s
, а не в StringJoiner
.
Решение
Вот рабочий фрагмент, объединяющий все:
String[] arr = new String[]{"i", "am", "super", "HERO"};
StringJoiner sj = new StringJoiner(" ");
// Capitalize first word
sj.add(Character.toUpperCase(arr[0].charAt(0)) + arr[0].substring(1));
// Add the remaining words
for (int i = 1; i < arr.length; i++) {
sj.add(arr[i]);
}
String result = sj.toString() + ".";
System.out.println(result);
Обратите внимание, что вы можете захотеть проверить регистр, где слово arr
вообще отсутствует, т. Е. Где оно пустое.Тогда текущий код потерпит неудачу.
Сделайте себе одолжение и упакуйте код с заглавными буквами в небольшой служебный метод:
private static String capitalize(String word) {
return Character.toUpperCase(word.charAt(0)) + word.substring(1);
}
Тогда код просто:
String[] arr = new String[]{"i", "am", "super", "HERO"};
StringJoiner sj = new StringJoiner(" ");
// Capitalize first word
sj.add(capitalize(arr[0]));
// Add the remaining words
for (int i = 1; i < arr.length; i++) {
sj.add(arr[i]);
}
String result = sj.toString() + ".";
System.out.println(result);
Stream Solution
Если вам нравится Stream-API:
String result = capitalize(arr[0])
+ Arrays.stream(arr).skip(1)
.collect(Collectors.joining(" "))
+ ".";
StringJoiner Suffix
Вы также можете сделатьдобавление "."
с использованием суффикса StringJoiner
s:
StringJoiner sj = new StringJoiner(" ", "", ".");
Затем автоматически добавляется "."
в конец, когда вы делаете toString
.
Аналогично дляПотоковое решение:
Collectors.joining(" ", "", ".")