Dhawan Gayash
Dhawan Gayash

Reputation: 463

What do these special characters mean in Java?

I was looking at some of the jdk code. I found these characters. Could someone explain to me what do these mean.

public static String quote(String s) {
    int slashEIndex = s.indexOf("\\E");        // What does this mean. Is this a special char in java. if so what does this do.
    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();
}

From the above code example I was able to figure out what's happening as in the method finds the occurrences of \ and converts them to \E and \Q. Could someone explain why that's the case.

For more context on this method, I was looking into the Pattern.quote() method from jdk 1.6

Upvotes: 12

Views: 13261

Answers (3)

Kumar Vivek Mitra
Kumar Vivek Mitra

Reputation: 33534

\Q and \E is exactly what Pattern.quote() does, that is to Returns a literal pattern String for the specified String.

For more details see this link:

http://docs.oracle.com/javase/1.5.0/docs/api/java/util/regex/Pattern.html

Upvotes: 8

Sergey Kalinichenko
Sergey Kalinichenko

Reputation: 726509

Java regex engine blocks special interpretation of all meta-characters between \Q and \E. For example, [name] matches a single character ('n', 'a', 'm', or 'e'), while \Q[name]\E matches six characters - '[', 'n', 'a', 'm', 'e', and ']'. See the Special Characters section of the regex tutorial for more detail.

The method makes a regular expression from a string that is presumably provided externally (e.g. entered by a user). Since the string may contain meta-characters, the method encloses the entire string in \Q and \E. If the string already contains a \E, the method inserts the end of the quote, a match of \E, and a beginning of a new quote for each \E that it finds..

Upvotes: 11

Louis Wasserman
Louis Wasserman

Reputation: 198033

Well, \Q and \E have a special meaning in Java regular expressions...

Most of this method is just working on the tricky edge case of quoting the quote markers \Q and \E themselves.

Upvotes: 3

Related Questions