import java.util.ArrayList;
import java.util.List;
public class SplitStringEvery {
private static final int numberOfRepeats = 3000000;
private static final String textToRepeat = "1";
private static final int interval = 1;
private static final int numberOfTestsToRun = 10;
public static void main(String[] args) {
StringBuilder sb = new StringBuilder(numberOfRepeats * textToRepeat.length());
for (int i = 0; i < numberOfRepeats; i++) {
sb.append(textToRepeat);
}
final String stringToSplit = sb.toString();
List<Long> elapsedTimesSplit = new ArrayList<Long>(numberOfTestsToRun);
List<Long> elapsedTimesSubstring = new ArrayList<Long>(numberOfTestsToRun);
long startTime;
long endTime;
//Tests to run
for (int i = 0; i < numberOfTestsToRun; i++) {
startTime = System.currentTimeMillis();
stringToSplit.split("(?<=\\G.{" + interval + "})");
endTime = System.currentTimeMillis();
elapsedTimesSplit.add(endTime - startTime);
//-------------
startTime = System.currentTimeMillis();
splitStringEvery(stringToSplit, interval);
endTime = System.currentTimeMillis();
elapsedTimesSubstring.add(endTime - startTime);
}
//Calculate averages:
long splitSum = 0;
long substringSum = 0;
for (int i = 0; i < numberOfTestsToRun; i++) {
splitSum += elapsedTimesSplit.get(i);
substringSum += elapsedTimesSubstring.get(i);
}
long splitAvg = splitSum / elapsedTimesSplit.size();
long substringAvg = substringSum / elapsedTimesSplit.size();
//Print data:
System.out.println("Split:");
System.out.println(elapsedTimesSplit);
System.out.println("Substring:");
System.out.println(elapsedTimesSubstring);
System.out.println("\nAverage:");
System.out.println("Split: " + splitAvg + " Substring: " + substringAvg);
System.out.println("\nFactor:");
System.out.println(splitAvg / (double)substringAvg);
}
public static String[] splitStringEvery(String s, int interval) {
int arrayLength = (int) Math.ceil(((s.length() / (double)interval)));
String[] result = new String[arrayLength];
int j = 0;
int lastIndex = result.length - 1;
for (int i = 0; i < lastIndex; i++) {
result[i] = s.substring(j, j + interval);
j += interval;
}
result[lastIndex] = s.substring(j);
return result;
}
}