user3001418
user3001418

Reputation: 165

removing extra white spaces from text files

I have number of text files in the following format:

196903274115371008    @266093898 

Prince George takes his first public steps with his mom,                              Catherine, Duchess of    

Cambridge.

I would like to remove all extra while spaces + new line characters except the first new line characters. So I would like to above to be like this:

196903274115371008@266093898 

Prince George takes his first public steps with his mom, Catherine, Duchess of Cambridge.

I wrote the following code :

package remove_white_space222;

import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;


public class Remove_white_space222 {

    public static void main(String[] args) throws FileNotFoundException, IOException {

        FileReader fr = new FileReader("input.txt"); 
        BufferedReader br = new BufferedReader(fr); 
        FileWriter fw = new FileWriter("outfile.txt"); 
        String line;

        while((line = br.readLine()) != null)
        { 
            line = line.trim(); // remove leading and trailing whitespace
            line=line.replaceAll("\\s+", " ");
            fw.write(line);


        }
        fr.close();
        fw.close();
    }

}

Thanks in advance for your help,,,,

Upvotes: 5

Views: 19235

Answers (4)

Bentaye
Bentaye

Reputation: 9756

You can keep your logic for all the lines but line 1 (the 2nd line), just stick "\n\n" in that case, so you have an empty line.

Also, I'd advise to open your resources in the try this way you don't have to worry about closing them

try(FileReader fr = new FileReader("input.txt");
    BufferedReader br = new BufferedReader(fr);
    FileWriter fw = new FileWriter("outfile.txt") ) {

    String line;
    int lineNumber = 0;
    while((line = br.readLine()) != null) {
        if(lineNumber == 1) {
            line = "\n\n";
        } else {
            line = line.trim().replaceAll("\\s+", " ");
        }
        fw.write(line);
        lineNumber++;
    }
}

Outputs:

196903274115371008 @266093898

Prince George takes his first public steps with his mom, Catherine, Duchess ofCambridge.

Upvotes: 0

Aarati Sakhare
Aarati Sakhare

Reputation: 9

    File file = new File("input_file.txt");
    try(BufferedReader br = new BufferedReader(new FileReader(file)); 
            FileWriter fw = new FileWriter("empty_file.txt")) {
        String st;
        while((st = br.readLine()) != null){
            fw.write(st.replaceAll("\\s+", " ").trim().concat("\n"));
        }
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

Upvotes: 1

Serge Ballesta
Serge Ballesta

Reputation: 148910

You can use status via an enum to add newlines after first line and all empty lines following it.

package remove_white_space222;

import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.PrintWriter
import java.io.IOException;


public class Remove_white_space222 {

    enum Status {

        FIRST, EMPTY, NORMAL;
    }

    public static void main(String[] args) throws FileNotFoundException, IOException {

        FileReader fr = new FileReader("input.txt"); 
        BufferedReader br = new BufferedReader(fr); 
        FileWriter fw = new FileWriter("outfile.txt"); 
        PrintWriter pw = new PrintWriter(fw);
        String line;

        while((line = br.readLine()) != null)
        { 
            line = line.trim(); // remove leading and trailing whitespace
            line=line.replaceAll("\\s+", " ");
            fw.write(line);
            if (status != Status.NORMAL) {
                if ((status == Status.FIRST) || line.isEmpty()) {
                    pw.println();
                    status = Status.EMPTY;
                } else {
                    status = Status.NORMAL;
                }
            }
        }
        fr.close();
        fw.close();
    }

}

Upvotes: 0

Martin Konecny
Martin Konecny

Reputation: 59611

Here's one approach:

public static void main(String[] args) throws IOException {
       FileReader fr = new FileReader("input.txt"); 
        BufferedReader br = new BufferedReader(fr); 
        FileWriter fw = new FileWriter("outfile.txt"); 
        String line;

        int lineNum = 0;
        while((line = br.readLine()) != null)
        { 
            //check if we are working with the first two lines 
            //(which should remain untouched)
            if (lineNum > 1) {
                //make sure we ignore any empty lines
                if (line.trim().length() > 0) {
                    //add a space to the end of each line to make 
                    //padding before we append the next line.
                    line=line.trim().replaceAll("\\s+", " ") + " ";
                }
            } else {
                //remove all whitespace.
                line = line.trim().replaceAll("\\s", "");
                line = line + "\n";
            }
            fw.write(line);
            lineNum++;
        }
        fr.close();
        fw.close();
}

Output:

196903274115371008@266093898 

Prince George takes his first public steps with his mom, Catherine, Duchess of Cambridge. %  

Upvotes: 0

Related Questions