Details
-
Improvement
-
Status: Closed
-
Minor
-
Resolution: Fixed
-
None
-
None
Description
Notice that we use StringUtils.contains to validate project/cube/model names. It's not high efficiency and elegant.
I did a small test:
public class TempTest { Pattern r = Pattern.compile("^[a-zA-Z0-9_]*$"); @Test public void test() { final char[] VALID_MODELNAME = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890_".toCharArray(); String s1 = "abc@"; System.out.println("Call StringUtils.containsOnly 100 times"); long start = System.nanoTime(); for(int i =0; i<100; ++i) { StringUtils.containsOnly(s1, VALID_MODELNAME); } long end = System.nanoTime(); System.out.println(end - start); System.out.println("Call Regex match 100 times"); start = System.nanoTime(); for(int i =0; i<100; ++i) { containsByRegex(s1); } end = System.nanoTime(); System.out.println(end - start); } private boolean containsByRegex(final String s) { Matcher matcher = r.matcher(s); return matcher.find(); } }
The result shows:
Call StringUtils.containsOnly 100 times 4740997 Call Regex match 100 times 753182
Conclusion:
Regex is better than StringUtils.containsOnly