Se eu entendi direito, dá para fazer de forma mais simples:
String str = "TANTOFAZOTEXTO";
int quebraLinhas = 3; // dividir a string em 3 partes iguais
int qtdChar = str.length() / quebraLinhas; // tamanho de cada parte
String[] partes = new String[quebraLinhas]; // array com as partes
String sobra = "";
for (int i = 0; i < str.length(); i += qtdChar) {
if (i + qtdChar <= str.length()) { // ainda tem caracteres suficientes para ser uma parte
int indice = i / qtdChar;
String parte = str.substring(i, i + qtdChar);
if (indice % 2 == 0) { // índice par, inverte a string
partes[indice] = new StringBuilder(parte).reverse().toString();
} else {
partes[indice] = parte;
}
} else { // último pedaço é a sobra
sobra = str.substring(i);
}
}
// em vez de concatenar strings, use um StringBuilder para ir montando a string aos poucos
StringBuilder sb = new StringBuilder();
// i é o índice do array de partes, j é o índice da sobra
for (int i = 0, j = 0; i < partes.length; i++) {
if (i % 2 == 0 && j < sobra.length()) { // índice par e ainda tem caracteres da sobra para usar
if (j % 2 == 0) { // insere a sobra antes
sb.append(sobra.charAt(j));
sb.append(partes[i]);
} else { // insere a sobra depois
sb.append(partes[i]);
sb.append(sobra.charAt(j));
}
j++;
} else { // índice ímpar, ou não tem mais caracteres da sobra
sb.append(partes[i]);
}
}
sb.append(sobra); // adicione a sobra também
System.out.println(sb.toString()); // TTNATOFAZXETOOTO