fork download
  1. import java.util.*;
  2.  
  3. class Foo {
  4. private static volatile String r;
  5.  
  6. public static void main(String[] args) throws Exception {
  7. List<String> datas = new ArrayList<>();
  8. for (int i = 0; i < 100_000; ++i) {
  9. datas.add(data(i));
  10. }
  11.  
  12. for (int i = 0; i < 20; ++i) {
  13. run(datas);
  14. }
  15. }
  16.  
  17. private static void run(List<String> datas) {
  18. long start = System.nanoTime();
  19. for (String data : datas) {
  20. r = basic(data);
  21. }
  22. long basicElapsed = System.nanoTime() - start;
  23.  
  24. start = System.nanoTime();
  25. for (String data : datas) {
  26. r = regex(data);
  27. }
  28. long regexElapsed = System.nanoTime() - start;
  29.  
  30. double ratio = (double) regexElapsed / basicElapsed;
  31. System.err.printf("Basic: %d Regex: %d Ratio: %f%n", basicElapsed, regexElapsed, ratio);
  32. }
  33.  
  34. private static String regex(String data) {
  35. return data.replaceAll("([^(]+)[(]([^)]+)[)].*", "$1$2");
  36. }
  37.  
  38. private static String basic(String data) {
  39. // Assuming ( and ) are present in the string, in that order.
  40. int openingBracket = data.indexOf('(');
  41. int closingBracket = data.indexOf(')', openingBracket);
  42. return new StringBuilder(closingBracket - 1)
  43. // The bit up to (but not including) the (
  44. .append(data, 0, openingBracket)
  45. // The bit after the (, up to the ).
  46. .append(data, openingBracket + 1, closingBracket)
  47. .toString();
  48. }
  49.  
  50. private static String data(int i) {
  51. return "Name" + i + " (birthyear)" + i;
  52. }
  53. }
  54.  
Success #stdin #stdout #stderr 3.6s 711680KB
stdin
Standard input is empty
stdout
Standard output is empty
stderr
Basic: 18467869    Regex: 188033648    Ratio: 10.181665
Basic: 14323563    Regex: 159676918    Ratio: 11.147849
Basic: 13750123    Regex: 161209847    Ratio: 11.724248
Basic: 13884231    Regex: 160271747    Ratio: 11.543437
Basic: 13474228    Regex: 162134931    Ratio: 12.032966
Basic: 14014296    Regex: 159530766    Ratio: 11.383431
Basic: 13750103    Regex: 159949844    Ratio: 11.632629
Basic: 13321839    Regex: 164881670    Ratio: 12.376795
Basic: 13669497    Regex: 160836193    Ratio: 11.766065
Basic: 13601433    Regex: 160906422    Ratio: 11.830108
Basic: 13652840    Regex: 159092123    Ratio: 11.652676
Basic: 13677041    Regex: 159386593    Ratio: 11.653587
Basic: 13665625    Regex: 162631723    Ratio: 11.900789
Basic: 13883890    Regex: 161460567    Ratio: 11.629346
Basic: 14078708    Regex: 160794404    Ratio: 11.421105
Basic: 13930107    Regex: 165848352    Ratio: 11.905749
Basic: 13531164    Regex: 163416952    Ratio: 12.077080
Basic: 13477935    Regex: 164467242    Ratio: 12.202703
Basic: 13920168    Regex: 161351535    Ratio: 11.591206
Basic: 13753530    Regex: 158661745    Ratio: 11.536074