Джава.Капитализация, добавление периода - PullRequest
0 голосов
/ 11 февраля 2019

Работаем над этим заданием новичка и нуждаемся в помощи.

Этот код должен: Прописать первую букву первого слова.Добавьте точку (.) В конец предложения.Соедините слова в полную строку с пробелами.Никаких других манипуляций со словами.

Вот пример того, что должен делать этот код: INPUT " i ", " am ", "super"," HERO"OUTPUT Я супер HERO.

Я думал об этом в таком случае:

import java.util.StringJoiner;
import java.lang.String;

public class My {
    public static void main(String[] args) {

        String[] arr = new String[]{"i", "am", "super", "HERO"};
        StringJoiner sj = new StringJoiner(" ");
        //StringBuffer sb = new StringBuffer(".");
        for (String s : arr) {
            sj.add(s);
        }
        sj.append(".");
        sj.capitalize();
        System.out.println(sj);

}

Но ловит ошибку при" append"и" capitalize"- не удается разрешить метод.Пожалуйста, помогите.

Ответы [ 3 ]

0 голосов
/ 11 февраля 2019

Пояснение

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(" ", "", ".")
0 голосов
/ 11 февраля 2019

Нет способа сделать это с помощью StringJoiner.

public class My {
public static void main(String[] args) {

    String[] arr = new String[]{"i", "am", "super", "HERO"};
    arr[0].toUpperCase();

    StringJoiner sj = new StringJoiner(" ");

    for (String s : arr) {

        sj.add(s);
    }
    sj.append(".");

    System.out.println(sj);
}
0 голосов
/ 11 февраля 2019

Небольшой пример со StringBuilder, который вы можете проверить здесь https://docs.oracle.com/javase/7/docs/api/java/lang/StringBuilder.html,, у которого есть метод добавления.

Для ввода заглавных букв в словах вы можете проверить Как использовать заглавные буквы первого символа каждого словав строке

Пример

    String[] arr = new String[]{"i", "am", "super", "HERO"};
    StringBuilder sb = new StringBuilder();

    for (String word : arr){
        sb.append(WordUtils.capitalize(word));
    }

    sb.toString();
...