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: 311

Filed under:

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

Related posts about android