Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

What do these special characters mean in Java?

Tags:

java

regex

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

like image 784
Dhawan Gayash Avatar asked Aug 13 '12 02:08

Dhawan Gayash


People also ask

What are the special characters in Java?

Examples of special characters are:- !( exclamation mark), , (comma), #(hash), etc. Methods: Using Character class.

What does \\ s+ in Java mean?

\\s - matches single whitespace character. \\s+ - matches sequence of one or more whitespace characters.

What is \' in Java?

\\ is a control sequence used for displaying a backslash as output. so let's use this concept in the previous java code to avoid the compile-time error: public class Test { public static void main(String[] args)

What is special String in Java?

Java String is, however, special. Unlike an ordinary class: String is associated with string literal in the form of double-quoted texts such as " hello, world ". You can assign a string literal directly into a String variable, instead of calling the constructor to create a String instance.


2 Answers

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..

like image 157
Sergey Kalinichenko Avatar answered Oct 02 '22 00:10

Sergey Kalinichenko


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.

like image 38
Louis Wasserman Avatar answered Oct 02 '22 00:10

Louis Wasserman