views:

57

answers:

2

What would be a Java 1.4.2 equivalent of Pattern.quote?

I was using Pattern.quote() on a URI but now need to make it 1.4.2 compatible.

+3  A: 

Well the source code of Pattern.quote is available and looks like this:

public static String quote(String s) {
    int slashEIndex = s.indexOf("\\E");
    if (slashEIndex == -1)
        return "\\Q" + s + "\\E";

    StringBuilder sb = new StringBuilder(s.length() * 2);
    sb.append("\\Q");
    slashEIndex = 0;
    int current = 0;
    while ((slashEIndex = s.indexOf("\\E", current)) != -1) {
        sb.append(s.substring(current, slashEIndex));
        current = slashEIndex + 2;
        sb.append("\\E\\\\E\\Q");
    }
    sb.append(s.substring(current, s.length()));
    sb.append("\\E");
    return sb.toString();
}

Basically it relies on

\Q  Nothing, but quotes all characters until \E
\E  Nothing, but ends quoting started by \Q

and has a special treatement of the case in which \E is present in the string.

aioobe
That will actually do for me. Excuse my newbness, but how did you obtain the source?
AHungerArtist
The source is provided with the SDK, in eclipse you can shift-klick on a class to look at it's source.
Tobias P.
Available for download at http://java.sun.com/javase/downloads/index.jsp
aioobe
@Tobias, I think you mean Ctrl+Click, but I believe it requires that you specify the location of the source-zip file.
aioobe
Thanks a bunch.
AHungerArtist
Yes, should be click ;)You only need to use the JDK as JRE in Eclipse.
Tobias P.
Well my point was that you wrote shift ;-)
aioobe
+2  A: 

This is the code of quote:

    public static String quote(String s) {
        int slashEIndex = s.indexOf("\\E");
        if (slashEIndex == -1)
            return "\\Q" + s + "\\E";

        StringBuilder sb = new StringBuilder(s.length() * 2);
        sb.append("\\Q");
        slashEIndex = 0;
        int current = 0;
        while ((slashEIndex = s.indexOf("\\E", current)) != -1) {
            sb.append(s.substring(current, slashEIndex));
            current = slashEIndex + 2;
            sb.append("\\E\\\\E\\Q");
        }
        sb.append(s.substring(current, s.length()));
        sb.append("\\E");
        return sb.toString();
    }

Seems not hard copying or implementing by your self or?

Edit: aiobee was faster, sry

Tobias P.
@Tobias: You can add value to your reply by replacing the StringBuilder with a StringBuffer; StringBuilder wasn't introduced until JDK 1.5.
Alan Moore