fork(2) download
  1. /* package whatever; // don't place package name! */
  2.  
  3. import java.util.*;
  4. import java.lang.*;
  5. import java.util.regex.Matcher;
  6. import java.util.regex.Pattern;
  7.  
  8. /* Name of the class has to be "Main" only if the class is public. */
  9. class Ideone
  10. {
  11. public static void main (String[] args) throws java.lang.Exception
  12. {
  13. int count = 1_000_000;
  14. String str = "<name>A</name><name>B</name><name>C</name>";
  15. String[] patterns = { "<name>.*?</name>", "<name>[^<]*</name>" };
  16.  
  17. for (String pattern : patterns) {
  18. // 判定するパターンを生成
  19. Pattern p = Pattern.compile(pattern);
  20. Matcher m = p.matcher(str);
  21. long[] time = new long[10];
  22. for (int i = 0; i < time.length; i++) {
  23. long start = System.currentTimeMillis();
  24. for (int j = 0; j < count; j++) {
  25. // 出力
  26. while (m.find()) {
  27. }
  28. m.reset();
  29. }
  30. time[i] = System.currentTimeMillis() - start;
  31. }
  32. System.out.println("Pattern: " + pattern);
  33. System.out.println(Arrays.toString(time));
  34. System.out.println(Arrays.stream(time).summaryStatistics());
  35. }
  36. }
  37. }
Success #stdin #stdout 2.8s 4386816KB
stdin
Standard input is empty
stdout
Pattern: <name>.*?</name>
[175, 134, 130, 129, 131, 129, 129, 129, 129, 129]
LongSummaryStatistics{count=10, sum=1344, min=129, average=134.400000, max=175}
Pattern: <name>[^<]*</name>
[164, 130, 129, 129, 127, 129, 130, 130, 132, 129]
LongSummaryStatistics{count=10, sum=1329, min=127, average=132.900000, max=164}