Софтуерно Инженерство
Loading...
IvanRachev avatar IvanRachev 0 Точки

Задача от форматиране на низове

Здравейте, задачката е следната: Даден е текст. Напишете програма, която променя регистъра на буквите на всички места в текста, заградени с таговете <upcase> и </upcase>. Таговете не могат да бъдат вложени. Гложди ме, че решението ми ми изглежда кофти ако се намери някой с по-елегантно да сподели ще съм благодарен :)

 

String text = "We are living in a <upcase>yellow submarine</upcase>." +
                          " We don't have <upcase>anything</upcase> else.";
        
        int index = text.indexOf("<");
        int index2 = text.indexOf(">");
        int index3 = text.indexOf("</");
        String first = text.substring(index2 + 1, index3).toUpperCase();
        index2 = text.indexOf(">", index2 + 1);
    
        String replaced = text.replace(text.substring(index, index2 + 1), first);
        
        index = replaced.indexOf("<");
        index3 = replaced.indexOf("</");
        index2 = replaced.indexOf(">", index2 + 1);
        String sec = replaced.substring(index2 + 1, index3).toUpperCase();
        index2 = replaced.indexOf(">", index2 + 1);
        
        replaced = replaced.replace(replaced.substring(index, index2 + 1), sec);
    
        System.out.println(replaced);

Тагове:
0
Java OOP Basics
RoYaL avatar RoYaL SoftUni Team Trainer 6883 Точки

Решението ми изглежда доста наивно. Предполага, че няма да имаш другаде символа ">". Т.е. решението е направено само за този текст, но няма да работи за кой да е текст. Какъв е смисълът да направиш решение за точно определен вход от данни? Със същия успех можеше да System.out.println(..) резултата, който се очаква, вместо да правиш тази серия от гимнастики.

Регулярен израз е един вариант, наистина.

Като за начало в условието не пише колко пъти ще срещнеш командата за смяна на регистъра, така че може би трябва да извършваш операцията толкова пъти, докато спреш да срещаш такава команда в текста. В момента го правиш точно два пъти до колкото виждам.

Другото е, че може би трябва да търсиш точно " <upcase> ". А не отварящ или затварящ "<" / ">", заради факта, че можеш да имаш текст "Four (4) is strictly less (<) <upcase>than</upcase> five (5)".

Псевдокод в твоя стил:

While <upcase> && </upcase> Occurs in TEXT:
    TextToReplaceStartIndex = Index Of <upcase> + Length Of <upcase>
    TextToReplaceEndIndex = Index Of </upcase>
    TEXT = Replace in TEXT (Index Of <upcase> Until Index Of </upcase> + Length Of </upcase>) With (TextToReplaceStartIndex Until TextToReplaceEndIndex) 

 

1