[ https://issues.apache.org/jira/browse/KYLIN-3196?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Kaige Liu updated KYLIN-3196: ----------------------------- Attachment: KYLIN-3196-replace-containsOnly-00001.patch > Replace StringUtils.containsOnly with Regex > ------------------------------------------- > > Key: KYLIN-3196 > URL: https://issues.apache.org/jira/browse/KYLIN-3196 > Project: Kylin > Issue Type: Improvement > Components: REST Service > Reporter: Kaige Liu > Assignee: Kaige Liu > Priority: Minor > Fix For: v2.3.0 > > Attachments: KYLIN-3196-replace-containsOnly-00001.patch > > > Notice that we use StringUtils.contains to validate project/cube/model names. > It's not high efficiency and elegant. > > I did a small test: > {code:java} > 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(); > } > }{code} > The result shows: > {code:java} > Call StringUtils.containsOnly 100 times > 4740997 > Call Regex match 100 times > 753182 > {code} > > Conclusion: > Regex is better than StringUtils.containsOnly -- This message was sent by Atlassian JIRA (v7.6.3#76005)