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
CvetanPetkov avatar CvetanPetkov 47 Точки

С regex няма ли да е по - лесно?

0
RoYaL avatar RoYaL Trainer 6849 Точки

Решението ми изглежда доста наивно. Предполага, че няма да имаш другаде символа ">". Т.е. решението е направено само за този текст, но няма да работи за кой да е текст. Какъв е смисълът да направиш решение за точно определен вход от данни? Със същия успех можеше да 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
Можем ли да използваме бисквитки?
Ние използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Можете да се съгласите с всички или част от тях.
Назад
Функционални
Използваме бисквитки и подобни технологии, за да предоставим нашите услуги. Използваме „сесийни“ бисквитки, за да Ви идентифицираме временно. Те се пазят само по време на активната употреба на услугите ни. След излизане от приложението, затваряне на браузъра или мобилното устройство, данните се трият. Използваме бисквитки, за да предоставим опцията „Запомни Ме“, която Ви позволява да използвате нашите услуги без да предоставяте потребителско име и парола. Допълнително е възможно да използваме бисквитки за да съхраняваме различни малки настройки, като избор на езика, позиции на менюта и персонализирано съдържание. Използваме бисквитки и за измерване на маркетинговите ни усилия.
Рекламни
Използваме бисквитки, за да измерваме маркетинг ефективността ни, броене на посещения, както и за проследяването дали дадено електронно писмо е било отворено.