Line Filters in Java
A line filter is a common type of program that reads input on stdin, processes it, and then prints some derived result to stdout. grep
and sed
are common line filters.
Here’s an example line filter in Java that writes a capitalized version of all input text. You can use this pattern to write your own Java line filters.
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.io.IOException;
public class LineFilter {
public static void main(String[] args) {
// Wrapping System.in with a BufferedReader gives us a convenient
// readLine method that advances the reader to the next line.
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
try {
String line;
// readLine returns null when it reaches the end of the input
while ((line = reader.readLine()) != null) {
// Convert the line to uppercase
String ucl = line.toUpperCase();
// Write out the uppercased line
System.out.println(ucl);
}
} catch (IOException e) {
// Check for errors during reading
System.err.println("error: " + e.getMessage());
System.exit(1);
}
}
}
To try out our line filter, first make a file with a few lowercase lines.
$ echo 'hello' > /tmp/lines
$ echo 'filter' >> /tmp/lines
Then use the line filter to get uppercase lines.
$ cat /tmp/lines | java LineFilter
HELLO
FILTER
In this Java version, we use BufferedReader
to read input line by line, similar to the bufio.Scanner
in the original example. The readLine()
method serves a similar purpose to Scan()
in Go, advancing to the next line of input.
We use a try-catch block to handle potential IOException
s that might occur during reading, which is equivalent to checking the scanner’s error in the Go version.
The rest of the logic remains largely the same: we read each line, convert it to uppercase, and print it out.
Remember to compile the Java file before running it:
$ javac LineFilter.java
$ cat /tmp/lines | java LineFilter
This example demonstrates how to create a simple line filter in Java, processing input line by line and producing modified output.