< prev index next >
src/java.base/share/classes/java/util/regex/Pattern.java
Print this page
rev 12318 : [mq]: 8131034-Cleanup-in-j.u.regex.Pattern.quote
*** 563,573 ****
* and outside of a character class.
*
* <p>
* <b><a name="usc">Scripts</a></b> are specified either with the prefix {@code Is}, as in
* {@code IsHiragana}, or by using the {@code script} keyword (or its short
! * form {@code sc})as in {@code script=Hiragana} or {@code sc=Hiragana}.
* <p>
* The script names supported by <code>Pattern</code> are the valid script names
* accepted and defined by
* {@link java.lang.Character.UnicodeScript#forName(String) UnicodeScript.forName}.
*
--- 563,573 ----
* and outside of a character class.
*
* <p>
* <b><a name="usc">Scripts</a></b> are specified either with the prefix {@code Is}, as in
* {@code IsHiragana}, or by using the {@code script} keyword (or its short
! * form {@code sc}) as in {@code script=Hiragana} or {@code sc=Hiragana}.
* <p>
* The script names supported by <code>Pattern</code> are the valid script names
* accepted and defined by
* {@link java.lang.Character.UnicodeScript#forName(String) UnicodeScript.forName}.
*
*** 1297,1318 ****
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();
}
/**
* Recompile the Pattern instance from a stream. The original pattern
* string is read in and the object tree is recompiled from it.
--- 1297,1322 ----
public static String quote(String s) {
int slashEIndex = s.indexOf("\\E");
if (slashEIndex == -1)
return "\\Q" + s + "\\E";
! int lenHint = s.length();
! lenHint = (lenHint < Integer.MAX_VALUE - 8 - lenHint) ?
! (lenHint << 1) : (Integer.MAX_VALUE - 8);
!
! StringBuilder sb = new StringBuilder(lenHint);
sb.append("\\Q");
int current = 0;
! do {
! sb.append(s, current, slashEIndex)
! .append("\\E\\\\E\\Q");
current = slashEIndex + 2;
! } while ((slashEIndex = s.indexOf("\\E", current)) != -1);
!
! return sb.append(s, current, s.length())
! .append("\\E")
! .toString();
}
/**
* Recompile the Pattern instance from a stream. The original pattern
* string is read in and the object tree is recompiled from it.
*** 1365,1382 ****
matchRoot = lastAccept;
}
}
/**
! * The pattern is converted to normalizedD form and then a pure group
* is constructed to match canonical equivalences of the characters.
*/
private void normalize() {
boolean inCharClass = false;
int lastCodePoint = -1;
! // Convert pattern into normalizedD form
normalizedPattern = Normalizer.normalize(pattern, Normalizer.Form.NFD);
patternLength = normalizedPattern.length();
// Modify pattern to match canonical equivalences
StringBuilder newPattern = new StringBuilder(patternLength);
--- 1369,1386 ----
matchRoot = lastAccept;
}
}
/**
! * The pattern is converted to normalized form and then a pure group
* is constructed to match canonical equivalences of the characters.
*/
private void normalize() {
boolean inCharClass = false;
int lastCodePoint = -1;
! // Convert pattern into normalized form
normalizedPattern = Normalizer.normalize(pattern, Normalizer.Form.NFD);
patternLength = normalizedPattern.length();
// Modify pattern to match canonical equivalences
StringBuilder newPattern = new StringBuilder(patternLength);
< prev index next >