/* * Created on Mar 24, 2005 * * @author jbergin * * Edited on Mar 24, 2005 * * @author Eugene Wallingford * added ability to pass args via command line * */ package com.jbergin; import java.util.Random; import java.io.*; import java.util.ArrayList; /** * @author jbergin * */ public class RandomText { public RandomText(String filename, int length, int delta) { String original = grabFile(filename); int originalLength = original.length(); Random random = new Random(); int start = random.nextInt(originalLength-delta); String fragment = original.substring(start, start+delta); text = fragment; //System.out.print(fragment); for(int i = 0; i < length-delta; i++) { char ch = findNext(original, fragment); text += ch; //System.out.print(ch); fragment = fragment.substring(1, delta) + ch; } } private final char findNext(String original, String fragment) { char result=' '; int delta = fragment.length(); int where = 0; where = original.indexOf(fragment, where); ArrayList results = new ArrayList(); while(where > -1) { if(where+delta < original.length()) { char item = original.charAt(where+delta); results.add(new Character(item)); } where = original.indexOf(fragment, where+1); } Random random = new Random(); int which = random.nextInt(results.size()); Character ch = (Character)results.get(which); result = ch.charValue(); return result; } private static final String grabFile(String filename) { String original = null; try { FileInputStream in = new FileInputStream(filename); int buflen = in.available(); BufferedInputStream s = new BufferedInputStream(in, buflen); byte[] buf = new byte[buflen]; int n = s.read(buf); original = new String(buf); } catch (IOException exc) { System.out.println("Cannot open file " + filename); original = ""; } return original; } public String toString() { return text; } private String text; public static void main(String [] args) { String filename = "repub11.txt"; int length = 1000; int delta = 5; if ( args.length > 0 ) { filename = args[0]; length = Integer.parseInt( args[1] ); delta = Integer.parseInt( args[2] ); } RandomText ran = new RandomText( filename, length, delta ); System.out.println( ran.toString() ); } }