Using java.util.regex in Android apps - are there issues with this?
        Posted  
        
            by johnrock
        on Stack Overflow
        
        See other posts from Stack Overflow
        
            or by johnrock
        
        
        
        Published on 2010-04-02T04:30:43Z
        Indexed on 
            2010/04/02
            4:33 UTC
        
        
        Read the original article
        Hit count: 376
        
android
In an Android app I have a utility class that I use to parse strings for 2 regEx's. I compile the 2 patterns in a static initializer so they only get compiled once, then activities can use the parsing methods statically.
This works fine except that the first time the class is accessed and loaded, and the static initializer compiles the pattern, the UI hangs for close to a MINUTE while it compiles the pattern! After the first time, it flies on all subsequent calls to parseString().
My regEx that I am using is rather large - 847 characters, but in a normal java webapp this is lightning fast. I am testing this so far only in the emulator with a 1.5 AVD.
Could this just be an emulator issue or is there some other reason that this pattern is taking so long to compile?
private static final String exp1 = "(insertratherlong---847character--regexhere)";
private static Pattern regex1 = null;
private static final String newLineAndTagsExp = "[<>\\s]";
private static Pattern regexNewLineAndTags = null;
static {
    regex1 = Pattern.compile(exp1, Pattern.CASE_INSENSITIVE);
    regexNewLineAndTags = Pattern.compile(newLineAndTagsExp);
}
public static String parseString(CharSequence inputStr) {
    String replacementStr = "replaceMentText";
    String resultString = "none";
    try {
        Matcher regexMatcher = regex1.matcher(inputStr);
        try {
            resultString = regexMatcher.replaceAll(replacementStr);
        } catch (IllegalArgumentException ex) {
        } catch (IndexOutOfBoundsException ex) {
        }
    } catch (PatternSyntaxException ex) {
    }
    return resultString;
}
© Stack Overflow or respective owner