Tenho uma função que tem como parametros uma string e um numero. O numero indica quantos chars ficam em uppercase e em lowercase alternadamente. Por ex changeString(“ola preciso de ajuda”,5) tem de ficar OLAPRecisoDEAJUda. E a primeira mudança tem de ser uppercase.
public static String changeString (String line, int n) {
Scanner sc = new Scanner(System.in);
StringBuilder sb = new StringBuilder();
line = line.replaceAll("\\s", ""); // para retirar os espacos
for(int i = 0; i < line.length(); i++) {
char c = line.charAt(i);
if(i % n == 0 ) {
sb.append(Character.toUpperCase(c));
} else {
sb.append(Character.toLowerCase(c));
}
}
return sb.toString();
}
Em vez de iterar pelos caracteres um a um, basta iterar de n
em n
:
public static String changeString(String line, int n) {
StringBuilder sb = new StringBuilder();
line = line.replaceAll("\\s", ""); // para retirar os espacos
boolean upper = true; // indica se é uppercase ou lowercase
for (int i = 0; i < line.length(); i += n) {
int end = i + n;
if (end > line.length()) { // vê se passou do tamanho da string
end = line.length();
}
String trecho = line.substring(i, end);
if (upper) {
sb.append(trecho.toUpperCase());
} else {
sb.append(trecho.toLowerCase());
}
// inverte o boolean
upper = !upper;
}
return sb.toString();
}
Tirei o Scanner
porque ele não estava sendo usado pra nada.
A ideia é pegar trechos de n
em n
(tomando o cuidado de não ultrapassar o tamanho da string), e aí você vai alternando entre maiúsculas e minúsculas.
E para calcular o end
, pode trocar o if
por:
int end = Math.min(i + n, line.length());