Informatică, întrebare adresată de Patrick100, 8 ani în urmă

Găsește un titlu bun

Trebuie să definești o clasă Translator care conține o metodă transformaCuMajuscule. Metoda va primi un StringBuffer, ce conține doar litere ale alfabetului englez și spații și îl va modifica astfel încât fiecare dintre cuvinte să înceapă cu literă mare.
Semnătură metodă:
public static void transformaCuMajuscule(StringBuffer cuvinte)
Exemplu
// clasa ta aici
public class prog {
public static void main(String[] args) {
StringBuffer titlu = new StringBuffer("De ce e bine sa participi la concursuri");
Translator.transformaCuMajuscule(titlu);
System.out.println(titlu); // De Ce E Bine Sa Participi La Concursuri
}
}
Ma puteti ajuta cu o rezolvare in JAVA va rog.

Răspunsuri la întrebare

Răspuns de Apollyon
1

Răspuns:

public void transformaCuMajuscula(StringBuffer stringBuffer) {

       List<String> listaCuvinte = Arrays.stream(stringBuffer.toString().split(" ")).toList();

       stringBuffer.delete(0, stringBuffer.length());

       listaCuvinte.stream()

               .map(cuvantCurent -> cuvantCurent.substring(0, 1).toUpperCase() + cuvantCurent.substring(1))

               .forEach(cuvantCurent -> stringBuffer.append(cuvantCurent).append(" "));

       /*String[] arrayCuvinte = stringBuffer.toString().split(" ");

       stringBuffer.delete(0, stringBuffer.length());

       for (int i = 0; i < arrayCuvinte.length; i++) {

           arrayCuvinte[i] = arrayCuvinte[i].substring(0, 1).toUpperCase() + arrayCuvinte[i].substring(1);

       }

       for (String cuvantCurent : arrayCuvinte) {

           stringBuffer.append(cuvantCurent).append(" ");

       }*/

   }

Explicație:
       Ți-am pus două variante, ambele fac același lucru, prima cel puțin mie mi se pare mai „clean”.
       Ideea e că îți returnezi o listă / array
cu cuvintele din interiorul StringBuffer-ului.
       Odată ce avem lista / array-ul creat îl parcurgem iar fiecare cuvânt îl egalăm cu
cuvantCurent.substring(0, 1).toUpperCase() care practic îți returnează un String format din primul caracter din cuvântul curent ca și majusculă + un String cu restul caracterelor rămase (cuvantCurent.substring(1)).
       Rezultatul îl adaugi la StringBuffer + un spațiu (dacă chiar e poți șterge spațiul de la final cu
stringBuffer.deleteCharAt(stringBuffer.length() - 1); )
       Păi na, și cam aia e, când o să afișezi stringBuffer-ul în main(...) toate cuvintele o să înceapă cu majusculă.


Patrick100: Exception in thread "main" java.lang.StringIndexOutOfBoundsException: Range [0, 1) out of bounds for length 0
at java.base/jdk.internal.util.Preconditions$1.apply(Preconditions.java:55)
at java.base/jdk.internal.util.Preconditions$1.apply(Preconditions.java:52)
at java.base/jdk.internal.util.Preconditions$4.apply(Preconditions.java:213)
at java.base/jdk.internal.util.Preconditions$4.apply(Preconditions.java:210)
at java.base/jdk.internal.util.Preconditions.outOfBounds(Preconditions.java:98)
Patrick100: at java.base/jdk.internal.util.Preconditions.outOfBoundsCheckFromToIndex(Preconditions.java:112)
at java.base/jdk.internal.util.Preconditions.checkFromToIndex(Preconditions.java:349)
at java.base/java.lang.String.checkBoundsBeginEnd(String.java:4589)
at java.base/java.lang.String.substring(String.java:2703)
at Translator.transformaCuMajuscule(Main.java:7)
at main.main(Main.java:15)

Process finished with exit code 1
Apollyon: trebuie tratat cazul în care cuvântul e format dintr-o singură literă că ție-ți pușcă când vrei să concatenezi restul cuvântului care de fapt nu există
Apollyon: for (int i = 0; i < arrayCuvinte.length; ++i) {
if (arrayCuvinte[i].length() > 1) {
arrayCuvinte[i] = arrayCuvinte[i].substring(0, 1).toUpperCase() + arrayCuvinte[i].substring(1);
}
else {
arrayCuvinte[i] = arrayCuvinte[i].toUpperCase();
}
}
Apollyon: dar na, să adaugi .trim() la ambele just in case că eu am uitat :))
Apollyon: de fapt nu-l mai adăuga că te scapi de whitespaces când spargi în array, my bad.
Patrick100: esti super tare multumes foarte frumos
Patrick100: cum ai invatat programarea?
Apollyon: la facultate, de pe internet :)), proiecte, într-un final îi dai de cap
Patrick100: Multumesc frumos inca o data m-ai ajutat foarte mult
Alte întrebări interesante