package org.boon; import org.boon.core.reflection.FastStringUtils; import org.boon.primitive.CharScanner; import org.openjdk.jmh.annotations.GenerateMicroBenchmark; import org.openjdk.jmh.annotations.OutputTimeUnit; import org.openjdk.jmh.logic.BlackHole; import java.util.concurrent.TimeUnit; import java.util.regex.Pattern; public class SplitString { private static final String csv = "gomezle01,1933,0,ALS193307060,NYA,AL,1,1\n" + "ferreri01,1933,0,ALS193307060,BOS,AL,1,2\n" + "gehrilo01,1933,0,ALS193307060,NYA,AL,1,3\n" + "gehrich01,1933,0,ALS193307060,DET,AL,1,4\n" + "dykesji01,1933,0,ALS193307060,CHA,AL,1,5\n" + "cronijo01,1933,0,ALS193307060,WS1,AL,1,6\n" + "chapmbe01,1933,0,ALS193307060,NYA,AL,1,7\n" + "simmoal01,1933,0,ALS193307060,CHA,AL,1,8\n" + "ruthba01,1933,0,ALS193307060,NYA,AL,1,9\n" + "dickebi01,1933,0,ALS193307060,NYA,AL,0,\n" + "ferrewe01,1933,0,ALS193307060,CLE,AL,0,\n" + "foxxji01,1933,0,ALS193307060,PHA,AL,0,\n" + "hildeor01,1933,0,ALS193307060,CLE,AL,0,\n" + "lazzeto01,1933,0,ALS193307060,NYA,AL,0,\n" + "averiea01,1933,0,ALS193307060,CLE,AL,1,\n" + "crowdal01,1933,0,ALS193307060,WS1,AL,1,\n" + "grovele01,1933,0,ALS193307060,PHA,AL,1,\n" + "westsa01,1933,0,ALS193307060,SLA,AL,1,\n" + "hallabi01,1933,0,ALS193307060,SLN,NL,1,1\n" + "wilsoji01,1933,0,ALS193307060,SLN,NL,1,2\n" + "terrybi01,1933,0,ALS193307060,NY1,NL,1,3\n" + "friscfr01,1933,0,ALS193307060,SLN,NL,1,4\n" + "martipe01,1933,0,ALS193307060,SLN,NL,1,5\n" + "bartedi01,1933,0,ALS193307060,PHI,NL,1,6\n" + "hafeych01,1933,0,ALS193307060,CIN,NL,1,7\n" + "bergewa01,1933,0,ALS193307060,BSN,NL,1,8\n" + "kleinch01,1933,0,ALS193307060,PHI,NL,1,9\n" + "schumha02,1933,0,ALS193307060,NY1,NL,0,\n" + "cuccito01,1933,0,ALS193307060,BRO,NL,1,\n" + "engliwo01,1933,0,ALS193307060,CHN,NL,1,\n" + "hartnga01,1933,0,ALS193307060,CHN,NL,1,\n" + "hubbeca01,1933,0,ALS193307060,NY1,NL,1,\n" + "odoulle01,1933,0,ALS193307060,NY1,NL,1,\n" + "traynpi01,1933,0,ALS193307060,PIT,NL,1,\n" + "wanerpa01,1933,0,ALS193307060,PIT,NL,1,\n" + "warnelo01,1933,0,ALS193307060,CHN,NL,1,\n" + "gomezle01,1934,0,NLS193407100,NYA,AL,1,1\n" + "dickebi01,1934,0,NLS193407100,NYA,AL,1,2\n" + "gehrilo01,1934,0,NLS193407100,NYA,AL,1,3\n" + "gehrich01,1934,0,NLS193407100,DET,AL,1,4\n" + "foxxji01,1934,0,NLS193407100,PHA,AL,1,5\n" + "cronijo01,1934,0,NLS193407100,WS1,AL,1,6\n" + "manushe01,1934,0,NLS193407100,WS1,AL,1,7\n" + "simmoal01,1934,0,NLS193407100,CHA,AL,1,8\n" + "ruthba01,1934,0,NLS193407100,NYA,AL,1,9\n" + "bridgto01,1934,0,NLS193407100,DET,AL,0,\n" + "dykesji01,1934,0,NLS193407100,CHA,AL,0,\n" + "ferreri01,1934,0,NLS193407100,BOS,AL,0,\n" + "higgipi01,1934,0,NLS193407100,PHA,AL,0,\n" + "russeja01,1934,0,NLS193407100,WS1,AL,0,\n" + "averiea01,1934,0,NLS193407100,CLE,AL,1,\n" + "chapmbe01,1934,0,NLS193407100,NYA,AL,1,\n" + "cochrmi01,1934,0,NLS193407100,DET,AL,1,\n" + "hardeme01,1934,0,NLS193407100,CLE,AL,1,\n" + "ruffire01,1934,0,NLS193407100,NYA,AL,1,\n" + "westsa01,1934,0,NLS193407100,SLA,AL,1,\n" + "hubbeca01,1934,0,NLS193407100,NY1,NL,1,1\n" + "hartnga01,1934,0,NLS193407100,CHN,NL,1,2\n" + "terrybi01,1934,0,NLS193407100,NY1,NL,1,3\n" + "friscfr01,1934,0,NLS193407100,SLN,NL,1,4\n" + "traynpi01,1934,0,NLS193407100,PIT,NL,1,5\n" + "jackstr01,1934,0,NLS193407100,NY1,NL,1,6\n" + "medwijo01,1934,0,NLS193407100,SLN,NL,1,7\n" + "bergewa01,1934,0,NLS193407100,BSN,NL,1,8\n" + "cuyleki01,1934,0,NLS193407100,CHN,NL,1,9\n" + "moorejo02,1934,0,NLS193407100,NY1,NL,0,\n" + "deandi01,1934,0,NLS193407100,SLN,NL,1,\n" + "frankfr02,1934,0,NLS193407100,BSN,NL,1,\n" + "hermabi01,1934,0,NLS193407100,CHN,NL,1,\n" + "kleinch01,1934,0,NLS193407100,CHN,NL,1,\n" + "lopezal01,1934,0,NLS193407100,BRO,NL,1,\n" + "martipe01,1934,0,NLS193407100,SLN,NL,1,\n" + "mungova01,1934,0,NLS193407100,BRO,NL,1,\n" + "ottme01,1934,0,NLS193407100,NY1,NL,1,\n" + "vaughar01,1934,0,NLS193407100,PIT,NL,1,\n" + "wanerpa01,1934,0,NLS193407100,PIT,NL,1,\n" + "warnelo01,1934,0,NLS193407100,CHN,NL,1,\n" + "gomezle01,1935,0,ALS193507080,NYA,AL,1,1\n" + "hemslro01,1935,0,ALS193507080,SLA,AL,1,2\n" + "gehrilo01,1935,0,ALS193507080,NYA,AL,1,3\n" + "gehrich01,1935,0,ALS193507080,DET,AL,1,4\n" + "foxxji01,1935,0,ALS193507080,PHA,AL,1,5\n" + "cronijo01,1935,0,ALS193507080,BOS,AL,1,6\n" + "johnsbo01,1935,0,ALS193507080,PHA,AL,1,7\n" + "simmoal01,1935,0,ALS193507080,CHA,AL,1,8\n" + "vosmijo01,1935,0,ALS193507080,CLE,AL,1,9\n" + "averiea01,1935,0,ALS193507080,CLE,AL,0,\n" + "bridgto01,1935,0,ALS193507080,DET,AL,0,\n" + "cochrmi01,1935,0,ALS193507080,DET,AL,0,\n" + "ferreri01,1935,0,ALS193507080,BOS,AL,0,\n" + "grovele01,1935,0,ALS193507080,BOS,AL,0,\n" + "myerbu01,1935,0,ALS193507080,WS1,AL,0,\n" + "rowesc01,1935,0,ALS193507080,DET,AL,0,\n" + "westsa01,1935,0,ALS193507080,SLA,AL,0,\n" + "bluegos01,1935,0,ALS193507080,WS1,AL,1,\n" + "chapmbe01,1935,0,ALS193507080,NYA,AL,1,\n" + "cramedo01,1935,0,ALS193507080,PHA,AL,1,\n" + "hardeme01,1935,0,ALS193507080,CLE,AL,1,\n" + "walkebi01,1935,0,ALS193507080,SLN,NL,1,1\n" + "wilsoji01,1935,0,ALS193507080,PHI,NL,1,2\n" + "terrybi01,1935,0,ALS193507080,NY1,NL,1,3\n" + "hermabi01,1935,0,ALS193507080,CHN,NL,1,4\n" + "martipe01,1935,0,ALS193507080,SLN,NL,1,5\n" + "vaughar01,1935,0,ALS193507080,PIT,NL,1,6\n" + "medwijo01,1935,0,ALS193507080,SLN,NL,1,7\n" + "bergewa01,1935,0,ALS193507080,BSN,NL,1,8\n" + "ottme01,1935,0,ALS193507080,NY1,NL,1,9\n" + "friscfr01,1935,0,ALS193507080,SLN,NL,0,\n" + "hubbeca01,1935,0,ALS193507080,NY1,NL,0,\n" + "colliri02,1935,0,ALS193507080,SLN,NL,1,\n" + "deandi01,1935,0,ALS193507080,SLN,NL,1,\n" + "derripa01,1935,0,ALS193507080,CIN,NL,1,\n" + "hartnga01,1935,0,ALS193507080,CHN,NL,1,\n" + "mancugu01,1935,0,ALS193507080,NY1,NL,1,\n" + "moorejo02,1935,0,ALS193507080,NY1,NL,1,\n" + "schumha02,1935,0,ALS193507080,NY1,NL,1,\n" + "wanerpa01,1935,0,ALS193507080,PIT,NL,1,\n" + "whitebu01,1935,0,ALS193507080,SLN,NL,1,\n" + "grovele01,1936,0,NLS193607070,BOS,AL,1,1\n" + "ferreri01,1936,0,NLS193607070,BOS,AL,1,2\n" + "gehrilo01,1936,0,NLS193607070,NYA,AL,1,3\n" + "gehrich01,1936,0,NLS193607070,DET,AL,1,4\n" + "higgipi01,1936,0,NLS193607070,PHA,AL,1,5\n" + "applilu01,1936,0,NLS193607070,CHA,AL,1,6\n" + "radclri01,1936,0,NLS193607070,CHA,AL,1,7\n" + "averiea01,1936,0,NLS193607070,CLE,AL,1,8\n" + "dimagjo01,1936,0,NLS193607070,NYA,AL,1,9\n" + "bridgto01,1936,0,NLS193607070,DET,AL,0,\n" + "gomezle01,1936,0,NLS193607070,NYA,AL,0,\n" + "hemslro01,1936,0,NLS193607070,SLA,AL,0,\n" + "kenneve01,1936,0,NLS193607070,CHA,AL,0,\n" + "pearsmo01,1936,0,NLS193607070,NYA,AL,0,\n" + "chapmbe01,1936,0,NLS193607070,WS1,AL,1,\n" + "crosefr01,1936,0,NLS193607070,NYA,AL,1,\n" + "dickebi01,1936,0,NLS193607070,NYA,AL,1,"; private Integer parse(String str) throws Exception { int i=0; String[] splitLines = Str.splitLines(str); String[] stats; for (String line : splitLines) { stats = Str.splitComma(line); i += Integer.parseInt(stats[1]); } return i; } private Integer parseChars(String str) throws Exception { char[] chars = FastStringUtils.toCharArray(csv); int i=0; char[][] splitLines = CharScanner.splitLines(chars); char[][] stats; for (char[] line : splitLines) { stats = CharScanner.splitComma(line); i += CharScanner.parseInt(stats[1]); } return i; } private Integer parseJDK(String str) throws Exception { int i=0; String[] splitLines = str.split("(\n|\r)"); String[] stats; for (String line : splitLines) { stats = line.split( ","); i += Integer.parseInt(stats[1]); } return i; } static Pattern newLine = Pattern.compile("(\n|\r)"); private Integer parseJDK2(String str) throws Exception { int i=0; String[] splitLines = newLine.split(str); String[] stats; for (String line : splitLines) { stats = line.split( ","); i += Integer.parseInt(stats[1]); } return i; } static Pattern newLineOrComma = Pattern.compile("(\n|\r|,)"); private Object parseJDK3(String str) throws Exception { return newLineOrComma.split(str); } private Object parse3Chars(String str) throws Exception { char[] chars = FastStringUtils.toCharArray(str); return CharScanner.splitByChars(chars, '\n', '\r', ','); } private Object parse3Str(String str) throws Exception { return StringScanner.splitByChars(str, '\n', '\r', ','); } @GenerateMicroBenchmark @OutputTimeUnit(TimeUnit.SECONDS) public void splitString(BlackHole bh) throws Exception { bh.consume(parse(csv)); } @GenerateMicroBenchmark @OutputTimeUnit(TimeUnit.SECONDS) public void splitStringJDK(BlackHole bh) throws Exception { bh.consume(parseJDK(csv)); } @GenerateMicroBenchmark @OutputTimeUnit(TimeUnit.SECONDS) public void splitStringJDK2(BlackHole bh) throws Exception { bh.consume(parseJDK2(csv)); } @GenerateMicroBenchmark @OutputTimeUnit(TimeUnit.SECONDS) public void splitChars(BlackHole bh) throws Exception { bh.consume(parseChars(csv)); } @GenerateMicroBenchmark @OutputTimeUnit(TimeUnit.SECONDS) public void parse3JDK(BlackHole bh) throws Exception { bh.consume(parseJDK3(csv)); } @GenerateMicroBenchmark @OutputTimeUnit(TimeUnit.SECONDS) public void parse3Chars(BlackHole bh) throws Exception { bh.consume(parse3Chars(csv)); } @GenerateMicroBenchmark @OutputTimeUnit(TimeUnit.SECONDS) public void parse3Str(BlackHole bh) throws Exception { bh.consume(parse3Str(csv)); } public static void main(String... args) { } }