public class Zerstueckler {
	private java.util.Queue<String> fragmente;

	public Zerstueckler(String str, int anz_kopieen, int anz_teile) {
		java.util.Random r = new java.util.Random(System.currentTimeMillis());
		int max_len = 2 * str.length() / anz_teile;
		java.util.LinkedList<String> frgs = new java.util.LinkedList<String>();
		for (int i = 0; i < anz_kopieen; i++) {
			int pos = 0;
			while (pos < str.length()) {
				int len = r.nextInt(max_len) + 1;
				if (pos + len <= str.length())
					add(frgs,r,str.substring(pos,pos + len));
				else
					add(frgs,r,str.substring(pos));
				pos = pos + len;
			}
		}
		fragmente = frgs;
	}

	public Zerstueckler(String str) {
		this(str,4,4);
	}
	
	private static void add(java.util.LinkedList<String> l, java.util.Random r, String s) {
		if (r.nextInt(2) > 0)
			l.addFirst(s);
		else
			l.addLast(s);
	}
	
	public String fragment() {
		return fragmente.poll();
	}
		
	/**
	 * Beispiel-Verwendung
	 */
	public static void main(String[] args) {
		String str = "Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Phasellus tempus. Vestibulum laoreet sollicitudin nisi. Ut vulputate tristique tellus. Cras vitae eros";

		int anzahl_kopieen = 4, avg_fragmente_pro_kopie = 4;

		Zerstueckler z = new Zerstueckler(str,anzahl_kopieen,avg_fragmente_pro_kopie);
		String fragment = z.fragment();
		int i = 0;
		while (fragment != null) {
			i = i + 1;
			System.out.println(i + ". Fragment = " + fragment);
			fragment = z.fragment();
		}
	}
}
