The Java Program: Table.java

  1 // Table.java -- print a delimiter separated table
  2 
  3 import java.util.StringTokenizer;
  4 import java.io.IOException;
  5 import java.io.InputStreamReader;
  6 import java.io.BufferedReader;
  7 
  8 public class Table {
  9 
 10    // left justify a string by padding with blanks
 11    final static String padding = "                                   ";
 12    public static String fmt (String s, int width) {
 13       final int n = Math.max (width-s.length(), 0);
 14       return (s+padding.substring(0,n));
 15    }
 16 
 17    public static void main (String args[]) throws IOException {
 18       final String delim = args.length==1?args[0]:":";
 19       final String empty = "[empty]";
 20       final int width = 15;
 21       BufferedReader br = new BufferedReader (
 22          new InputStreamReader (System.in));
 23       while (true) {
 24          final String line = br.readLine();
 25          if (line==null) break;
 26          final StringTokenizer st = new StringTokenizer(line,delim,true);
 27          boolean field=true;  // initially expecting a field
 28          while (st.hasMoreTokens()) {
 29             final String token = st.nextToken();
 30             if (token.indexOf (delim)==-1) {
 31                System.out.print (fmt(token,width));  // not a delimiter
 32                field = false;
 33             } else if (field) {
 34                System.out.print (fmt(empty,width));  // missing field
 35                field = true;
 36             } else {
 37                field = true;
 38             }
 39          }
 40          if (field) {
 41             // The line ended with a delimiter; a field is missing
 42             System.out.print (fmt(empty,width));
 43          }
 44          System.out.println();
 45       }
 46    }
 47 }