Line Filters in Mercury
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 reads the next line of input.
        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/linesThen use the line filter to get uppercase lines.
$ cat /tmp/lines | java LineFilter
HELLO
FILTERIn this Java version:
We use
BufferedReaderto read input line by line, which is similar to thebufio.Scannerin the original example.The
whileloop withreadLine()is equivalent to thefor scanner.Scan()loop in the original.We use
String.toUpperCase()to convert each line to uppercase.Error handling is done using a try-catch block, which is Java’s equivalent to the error checking at the end of the original example.
We print to standard output using
System.out.println()and to standard error usingSystem.err.println().
This Java implementation provides the same functionality as the original, reading lines from standard input, converting them to uppercase, and printing the result to standard output.