Reputation: 165
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
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
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
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
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