Estoy tratando de hacer lo siguiente en un archivo txt, 1- invertir la línea para que la última línea sea la primera y así sucesivamente, 2- invertir las palabras para que la última palabra en una línea sea la primera, 3- invertir la letra de las palabras.

public static void main(String[] args) throws FileNotFoundException {
        ArrayList<String> revStr = new ArrayList<String>();

        Scanner input = new Scanner(new File("mobydick-1.txt"));
        while (input.hasNextLine()){
            revStr.add(input.nextLine());
        }
        for(int i = (revStr.size()-1); i >=0 ; i--){
            String ar[]=revStr.get(i).split(" ");
            for(int j = (ar.length-1); j >=0; j--){
                stringReverse(ar[j]);
                System.out.print(ar[j]+ " ");   
                }
            System.out.println(" ");
            }
    }
   private static String  stringReverse(String string) {
       if (string == null || string.length() == 0) {
           return string;
      }
       return stringReverse(string.substring(1)) + string.charAt(0);
   }

¿alguna sugerencia? hasta ahora solo pude hacer los primeros 2 y me topé con el tercero que está invirtiendo las letras de la palabra input

MOBY DICK; OR THE WHALE 

by Herman Melville


CHAPTER 1

Loomings.

Salida

.sgnimooL

1 RETPAHC


ellivleM namreH yb

ELAHW EHT RO ;KCID YBOM
-2
Ahmed Qani 23 oct. 2017 a las 06:47

3 respuestas

La mejor respuesta

Si desea continuar usando su algoritmo, es mejor usar StringBuilder, entonces para invertir la cadena puede usar StringBuilder.reverse() o hacer una función simple como la siguiente para hacer cualquier inversión por usted.

String stringReverse(String string) {
    if (string == null || string.length() == 0) {
        return string;
    }
    return stringReverse(string.substring(1)) + string.charAt(0);
 }
0
Muhammad Soliman 23 oct. 2017 a las 03:55

Lo que debe hacer es leer el archivo al revés, es decir, desde el último carácter del archivo.

Intente usar ReversedFileReader de apache.commons. O si no le gusta usar API externa, puede usar RandomAccessFile de JDK.

0
Nishit 23 oct. 2017 a las 03:55

El error está en

 for(int j = (ar.length-1); j >=0; j--){
      stringReverse(ar[j]);
      System.out.print(ar[j]+ " ");   
 }

Debe ser como

 for(int j = (ar.length-1); j >=0; j--){
         ar[j]= stringReverse(ar[j]);
         System.out.print(ar[j]+ " ");   
 }
0
Harshavardhan Konakanchi 23 oct. 2017 a las 04:33