public static void benchmarkSpeed(int iterations, StringSource src, StringDestination dst, StripAlgorithm... alg) throws Exception {
        Result[] speed = new Result[alg.length];

        System.out.println("\nBenchmarking at " + iterations + " strings");

        for (int j = 0; j < alg.length; j++) {
            StripAlgorithm a = alg[j];
            System.out.print(a.getClass().getSimpleName() + "\t");
            long t1 = System.currentTimeMillis();
            for (int i = 0; i < iterations; i++)
                dst.collect(a.strip(src.nextString()));
            long t2 = System.currentTimeMillis();
            long dt = t2 - t1;
            speed[j] = new Result(a.getClass().getSimpleName(), iterations * 1000.0 / dt);
            System.out.println("" + dt + "\t" + speed[j].result);
            System.gc();
        }

        Arrays.sort(speed);
        System.out.println("\nRankings:");
        Result prev = null;
        for (int j = 0; j < speed.length; j++) {
            System.out.format("%2d. %-40s%.2f\t%.2fx\t+%.1f%%\n",
                    speed.length - j, speed[j].name,
                    speed[j].result,
                    speed[j].result / speed[0].result,
                    (prev != null ? (speed[j].result / prev.result - 1) * 100 : 0)
            );
            prev = speed[j];
        }
    }