level08.lesson11.home05

Всем доброго!
собственно результат вроде правильный, но… терзают сомнения: если «слово» состоит из одного символа? ведь это тоже «первый» символ!
Если в слове есть заглавные буквы — их приводить к общему виду или нет? Хотя тут в задании только про первые символы речь идет… или, лучше сейчас об этом не задумываться?
public class Solution
{
    public static void main(String[] args) throws IOException
    {
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        String s = reader.readLine();

        //напишите тут ваш код
        String[]lines=s.split(" ");
        String sl = "";
        for (String line : lines)
        {
           if (!line.isEmpty())
                sl = sl + line.substring(0,1).toUpperCase() + line.substring(1) + " ";
            else
                sl = sl + " ";
        }
        System.out.println(sl.trim());
    }
}


вот пример работы:
com.javarush.test.level08.lesson11.home05.Solution
шерШень любит чай с горошком — это ввод
ШерШень Любит Чай С Горошком — результат

Process finished with exit code 0
— сама задача: /* Мама Мыла Раму. Теперь с большой буквы
Написать программу, которая вводит с клавиатуры строку текста.
Программа заменяет в тексте первые буквы всех слов на заглавные.
Вывести результат на экран.

Пример ввода:
мама мыла раму.

Пример вывода:
Мама Мыла Раму.
*/

6 комментариев

ppv
  • ppv
  • 0
  • Комментарий отредактирован 2017-01-03 03:41:45 пользователем ppv
Я эту задачу решал разбивая строку на массив символов,
Дальше проверка первого символа (пробел /не пробел).Если пробел -то дальше, если не пробел-меняем регистр.
А дальше по массиву проверка char [i] = пробел & char [i+1] не пробел, а символ, то символ в верхний регистр.
Ну а дальше обратно собирал строку из массива символов
Как-то так.
SergeyAP
Да я-то тоже решил. но, возник вопрос — как лучше? Почему? я сначала сделал, а потом задумался: что было бы, если бы это был реальный проект? явно парсить строки (скорее всего УРЛов). Обычно я сдаю — потом иду смотреть как эту задачу решили остальные. Не всегда, но стараюсь, чтобы учиться быстрее читать чужой код. Такой вопрос возник впервые. Увидел решение девушки, которая регулярными выражениями сделала. Да больше кода! Но ведь, получается, что ее решение правильнее?! для будущего;)
To4
  • To4
  • 0
Сергей а если наставить кучу пробелов вначале ваш код не рабочий, может trim стоило убрать. И прошел бы?
SergeyAP
  • SergeyAP
  • 0
  • Комментарий отредактирован 2017-01-03 11:39:49 пользователем SergeyAP
проверил — работает и с пробелами в начале. Просто убирает их в результе. Но в задаче не было условия сохранения вида строки — только первые символы в верх.регистр.
Поэтому решение принимается валидатором.
Trim вначале как раз для «красоты» вых. строки и экономии памяти. Зачем лишний символы?
Я специально привел пример с буквой в середине и предлогом. Про них тоже нет в задании. Поэтому было желание после преобразования первого символа на остальное сделать toLowerCase() ;) Но это в задании, а как было бы в реальном проекте?
To4
В том то и дело что строку то менять нельзя. Вот и пробелы тоже убирать нельзя тут такие условия везде) В этой задаче хоть более мене понятно — есть где все условия соблюдаешь, а в итоге надо сделать то чего в задании не было)
Ulancer
над этой задачей сидел дольше всех из данного блока.
пошел следующим образом.
1. Строку разбил на массив символов и перевел его в массив строк.
2. Если символ(строка) идет после пробела, повышал регистр.
3. Потом склеил массив строк в строку.
Все пробелы были сохранены.
Вот мой код с разбивкой на методы.

public static void main(String[] args) throws IOException{
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        String s = reader.readLine();
        String [] strArray = charArrayToStrArray(s.toCharArray());
        strArray = firstUpLetter(strArray);
        System.out.println(wholeSentence(strArray));
    }

    public static String[] charArrayToStrArray(char[] chArr){
        String [] strArr = new String[chArr.length];
        for (int i = 0; i < chArr.length; i++) {
            strArr[i] = String.valueOf(chArr[i]);
        }
        return strArr;
    }
    
    public static String[] firstUpLetter(String[] array){
        array[0] = array[0].toUpperCase();
        for (int i = 0; i < array.length; i++) {
            if (array[i].equals(" ") && !array[i+1].equals(" "))
                array[i+1] = array[i+1].toUpperCase();
        }
        return array;
    }
    
    public static String wholeSentence(String[] array){
        String str = array[0];
        for (int i = 1; i < array.length; i++) {
            str = str.concat(array[i]);
        }
        return str;
    }
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.