简体   繁体   中英

Reverse lines in ArrayList Java

I'm working on a Java program in which I must read the contents of a file and then print each lines reverse. For example the text:

Public Class Helloprinter
Public static void 

would print the following after running my reverse program:

retnirPolleh ssalc cilbup 
diov citats cilbup  

Here's what I got so far:

public static void main(String[] args) throws FileNotFoundException {
     // Prompt for the input and output file names
      ArrayList<String> list = new ArrayList<String>(); 
      //String reverse = "";
      Scanner console = new Scanner(System.in);
      System.out.print("Input file: ");
      String inputFileName = console.next();
      System.out.print("Output file: ");
      String outputFileName = console.next();


      // Construct the Scanner and PrintWriter objects for reading and writing

      File inputFile = new File(inputFileName);
      Scanner in = new Scanner(inputFile);
      PrintWriter out = new PrintWriter(outputFileName);
      String aString = ""; 

      while(in.hasNextLine())
      {           
          String line = in.nextLine(); 
          list.add(line);       
      }

      in.close(); 

      for(int i = 0; i <list.size(); i++)
      {
          aString = list.get(i); 
          aString = new StringBuffer(aString).reverse().toString();
          out.printf("%s", " " + aString); 
      }

      out.close(); 

}

} EDIT:

With Robert's posting it helped put me in the right direction. The problem is that with that is that it doesn't keep the lines.

Public Class Helloprinter
Public static void 

becomes after running my program:

retnirPolleh ssalc cilbup diov citats cilbup

it needs to keep the line layout the same. so it should be:

retnirPolleh ssalc cilbup
diov citats cilbup 

In your last loop why don't you just iterate through the list backwards? So:

for(int i = 0; i <list.size(); i++)

Becomes:

for(int i = list.size() - 1; i >=0; i--)

Just use a string builder. You were on the right trail. Probably just needed a little help. There is no "one way" to do anything, but you could try something like this:

Note: Here is my output: retnirPolleh ssalc cilbup diov citats cilbup

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.IOException;
import java.io.OutputStreamWriter;
import java.io.Writer;
import java.util.ArrayList;
import java.util.Scanner;

public class Reverse {

    public static void main(String[] args) {
        ArrayList<String> myReverseList = null;
        System.out.println("Input file: \n");
        Scanner input = new Scanner(System.in);
        String fileName = input.nextLine();
        System.out.println("Output file: \n");
        String outputFileName = input.nextLine();
        BufferedReader br = null;
        try {
            br = new BufferedReader(new FileReader(fileName));
            String text = null;
            myReverseList = new ArrayList<String>();
            StringBuilder sb = null;
            try {
                while ((text = br.readLine()) != null) {
                    sb = new StringBuilder();
                    for (int i = text.length() - 1; i >= 0; i--) {
                        sb.append(text.charAt(i));
                    }
                    myReverseList.add(sb.toString());
                }

            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        Writer writer = null;
        try {
            writer = new BufferedWriter(new OutputStreamWriter(
                new FileOutputStream(outputFileName), "utf-8"));
            for (String s : myReverseList) {
                writer.write("" + s + "\n");
            }

        } catch (IOException ex) {
            // report
        } finally {
            try {
                writer.close();
            } catch (Exception ex) {
            }
        }

    }

}

It seems like you already know how to read a file, so then call this method for each line. Note, this is recursion and it's probably not the most efficient but it's simple and it does what you want.

public String reverseString(final String s) {
        if (s.length() == 0)
            return s;
        // move chahctrachter at current position and then put it at the end of the string.
        return reverseString(s.substring(1)) + s.charAt(0);
    }

Your problem is in the line

      out.printf("%s", " " + aString); 

This doesn't output a newline. I'm also not sure why you are sticking a space in there.

It should be either:

      out.println( aString );

Or

      out.printf("%s%n", aString);

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM