O'Reilly logo

Java Cookbook by Ian F. Darwin

Stay ahead with the world's most comprehensive technology and business learning platform.

With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, tutorials, and more.

Start Free Trial

No credit card required

Precompiling the RE

Problem

You need to use the same RE many times over.

Solution

Precompile it using class recompile and include the resulting code fragment into your Java source code.

Discussion

Some REs never change. Those that don’t can be precompiled to speed up your program’s initialization. The class recompile (the only class in this API whose name doesn’t fit the Java capitalization style rules) contains a main program that requires two arguments: a Java identifier prefix and an RE pattern. When running it, remember that you should quote the RE pattern, as many of the special characters are the same for the REs as they are for many command-line interpreters. You run it by giving the java command, the full class name, the identifier prefix, and the RE pattern as one command line. Once you’ve seen that the RE is correct, you can run the command again, redirecting the results into a new Java file. You can then edit this file into a complete program or copy it into an existing Java file.

> java org.apache.regexp.recompile Name "[A-Z][a-z]+"

    // Pre-compiled regular expression '[A-Z][a-z]+'
    private static char[] NamePatternInstructions = 
    {
        0x007c, 0x0000, 0x0019, 0x005b, 0x0001, 0x0005, 0x0041, 
        0x005a, 0x005b, 0x0001, 0x0005, 0x0061, 0x007a, 0x007c, 
        0x0000, 0x0006, 0x0047, 0x0000, 0xfff8, 0x007c, 0x0000, 
        0x0003, 0x004e, 0x0000, 0x0003, 0x0045, 0x0000, 0x0000, 
    };

    private static RE NamePattern =
        new RE(new REProgram(NamePatternInstructions));
> java org.apache.regexp.recompile Name "[A-Z][a-z]+" > Name.java
>

The stuff that looks like a dump listing (the numbers with 0x at the front) are not a compiled Java program, but rather a compiled regular expression. It is there to speed up the runtime execution of your program.

The file (Name.java in this example) can be edited to start a new Java program or copied into an existing file. On some platforms, you can bypass that step and simply select the text with the mouse, copy it, and paste it into an editor or IDE editing window. In either case, the goal is to avoid manually retyping it; that would be error-prone and downright foolish.

With Safari, you learn the way you learn best. Get unlimited access to videos, live online training, learning paths, books, interactive tutorials, and more.

Start Free Trial

No credit card required