Como colocar n chars da String em UpperCase e outras n em lowerCase ? JAVA

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());

muito obrigado!!!