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:
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ă.
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
if (arrayCuvinte[i].length() > 1) {
arrayCuvinte[i] = arrayCuvinte[i].substring(0, 1).toUpperCase() + arrayCuvinte[i].substring(1);
}
else {
arrayCuvinte[i] = arrayCuvinte[i].toUpperCase();
}
}
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)