import java.util.regex.Pattern; public class Main { public static void main(String[] args) throws Exception { String s = "(Yeahhhh) I have finally made it to the (top)"; { long chars = 0; Pattern p = Pattern.compile("[()]"); // warmup chars += lengthReplaceAll(s, p); long start = System.currentTimeMillis(); for (int i = 0; i < 10000000; i++) { chars += lengthReplaceAll(s, p); } System.out.println(System.currentTimeMillis() - start + "ms"); System.out.println(chars); } { long chars = 0; // warmup chars += lengthCharAt(s); long start = System.currentTimeMillis(); for (int i = 0; i < 10000000; i++) { chars += lengthCharAt(s); } System.out.println(System.currentTimeMillis() - start + "ms"); System.out.println(chars); } { long chars = 0; // warmup chars += lengthCharAt2(s); long start = System.currentTimeMillis(); for (int i = 0; i < 10000000; i++) { chars += lengthCharAt2(s); } System.out.println(System.currentTimeMillis() - start + "ms"); System.out.println(chars); } } private static int lengthReplaceAll(String s, Pattern p) { return s.length() - p.matcher(s).replaceAll("").length(); } private static int lengthCharAt(String s) { int c = 0; int l = s.length(); for (int j = 0; j < l; j++) { switch (s.charAt(j)) { case '(': case ')': c++; } } return c; } /** * calling length() every time */ private static int lengthCharAt2(String s) { int c = 0; for (int j = 0; j < s.length(); j++) { switch (s.charAt(j)) { case '(': case ')': c++; } } return c; } }