// A program that produces a cross-reference listing. // Barry Cornelius, 6th March 2000 import java.text. BreakIterator; import java.io. BufferedReader; import java.io. InputStreamReader; import java.io. IOException; import java.util. Iterator; import java.util. Map; import java.util. Map.Entry; import java.util. Set; import java.util. TreeMap; import java.util. TreeSet; import java.net. URL; public class CrossRef { private static Map iMap; private static int iLineNumber; private static String iLine; public static void main(final String[] pArgs) throws IOException { iMap = new TreeMap(); URL tURL = new URL("http://www.dur.ac.uk/~dcl0bjc/CrossRef.txt"); BufferedReader tInputHandle = new BufferedReader(new InputStreamReader(tURL.openStream())); iLineNumber = 0; while (true) { iLine = tInputHandle.readLine(); if (iLine==null) { break; } iLineNumber++; iProcessLine(); } // System.out.println(iMap); iOutputCrossRef(); } public static void iProcessLine() { final BreakIterator tBoundary = BreakIterator.getWordInstance(); tBoundary.setText(iLine); int tStart = tBoundary.first(); while (true) { final int tEnd = tBoundary.next(); if (tEnd==BreakIterator.DONE) { break; } final String tWord = iLine.substring(tStart, tEnd); Set tSet; if (iMap.containsKey(tWord)) { tSet = (Set)iMap.get(tWord); } else { tSet = new TreeSet(); iMap.put(tWord, tSet); } tSet.add(new Integer(iLineNumber)); // System.out.println(iLineNumber + " " + tWord + " " + tSet); tStart = tEnd; } } public static void iOutputCrossRef() { final Set tEntrySet = iMap.entrySet(); final Iterator tEntrySetIterator = tEntrySet.iterator(); while (tEntrySetIterator.hasNext()) { Entry tEntry = (Entry)tEntrySetIterator.next(); String tWord = (String)tEntry.getKey(); System.out.print(tWord + " appears on lines:"); Set tLineNumberSet = (Set)tEntry.getValue(); Iterator tLineNumberSetIterator = tLineNumberSet.iterator(); while (tLineNumberSetIterator.hasNext()) { Integer tInteger = (Integer)tLineNumberSetIterator.next(); System.out.print(" " + tInteger.intValue()); } System.out.println(); } } }