Assim ficou o código:
public static void main(String[] args) {
String str = "TANTOFAZOTEXTO";
int quebraLinhas = 3;
int qtdChar = str.length() / quebraLinhas;
int resto = str.length() % quebraLinhas;
String[] stringFinal = new String[quebraLinhas+1];
int contador = 0;
if (str.length() % quebraLinhas != 0) {
contador = verificaPar(quebraLinhas);
String[] quebra = new String[quebraLinhas+1];
for (int i = 0; i <= str.length()-resto; i += qtdChar) {
if (i == str.length() - resto) {
quebra[i / qtdChar] = str.substring(i, str.length());
} else {
quebra[i / qtdChar] = str.substring(i, i + qtdChar);
}
}
if (contador > 0) {
for (int i = 0; i < contador*2; i += 2) {
for (int j = qtdChar-1; j >= 0; j--) {
char temp = quebra[i].charAt(j);
quebra[i] += temp;
}
quebra[i] = quebra[i].substring(qtdChar, qtdChar*2);
}
}
for (int i = 0; i < resto; i++) {
char temp = quebra[quebra.length-1].charAt(i);
String temp2 = String.valueOf(temp);
if ( i % 2 == 0) {
temp2 = temp + quebra[0];
quebra[0] = temp2;
} else {
quebra[quebra.length-2] += temp2;
}
}
stringFinal = quebra;
} else if (resto == 0) {
contador = verificaPar(quebraLinhas);
String[] quebra = new String[quebraLinhas];
for (int i = 0; i < str.length(); i += qtdChar) {
quebra[i / qtdChar] = str.substring(i, i + qtdChar);
}
if (contador > 0) {
for (int i = 0; i < contador*2; i += 2) {
for (int j = qtdChar-1; j >= 0; j--) {
char temp = quebra[i].charAt(j);
quebra[i] += temp;
}
quebra[i] = quebra[i].substring(qtdChar, qtdChar*2);
}
}
stringFinal = quebra;
}
String palavraFinal = "";
for (int i = 0; i < stringFinal.length; i++) {
String temp = stringFinal[i];
palavraFinal += temp;
}
System.out.println(Arrays.toString(stringFinal));
System.out.println(palavraFinal);
}
public static int verificaPar(int quebraLinhas) {
int contador = 0;
for (int i = 0; i < quebraLinhas; i++) {
if (i % 2 == 0) {
contador++;
}
}
return contador;
}
Em relação a sobra da String, seria assim:
A primeira letra da sobra colocada no início da nova palavra que foi formada pelo array, e a segunda letra colocada ao final, assim sucessivamente até que se esgote os caracteres da sobra.
Lembrando que também precisa inverter o conteúdo dos índices pares.
Ao final de tudo printar a palavra formada.
Tava quase fumaçando já, quando vejo a tua solução, parece a coisa mais simples do mundo. kkkkk. Não desmerecendo tua lógica, claro, mas quero dizer que conseguiu resolver de forma tão simples enquanto eu tava criando um código monstro.
Gosto de ir pegando esses problemas pra tentar resolver, mesmo com código feio e ineficiente mesmo, mas eu vou tentando e vou aprimorando de acordo com os estudos, pra ir evoluindo.
De qualquer forma, agradeço demais tua atenção. Sei que os programadores tem uma vida bem corrida (pelo menos é o que a maioria fala), e tirar um tempo pra vir aqui ajudar a gente que está engatinhando faz toda diferença.