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
Examples of special characters are:- !( exclamation mark), , (comma), #(hash), etc. Methods: Using Character class.
\\s - matches single whitespace character. \\s+ - matches sequence of one or more whitespace characters.
\\ 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)
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.
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..
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With