summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPekka Enberg <penberg@kernel.org>2011-01-26 21:32:06 +0000
committerPekka Enberg <penberg@kernel.org>2011-01-26 21:32:06 +0000
commitd7390c930d8f10c84902ee8ec008735939584541 (patch)
treef65b9f3565cf4b96fb62ca897c78b6441f872f03
parent2ca622f0a755dd2cade32f4624fe7ab39096d288 (diff)
downloadclasspath-d7390c930d8f10c84902ee8ec008735939584541.tar.gz
Implement Pattern.quote() API method
Reviewed-by: Dr Andrew John Hughes <gnu_andrew@member.fsf.org> 2010-07-02 Ivan Maidanski <ivmai@mail.ru> * java/util/regex/Pattern.java: (quote): Implement new 1.5 Java API method.
-rw-r--r--ChangeLog5
-rw-r--r--java/util/regex/Pattern.java40
2 files changed, 44 insertions, 1 deletions
diff --git a/ChangeLog b/ChangeLog
index 0aacf6710..a575fb9f4 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,8 @@
+2010-07-02 Ivan Maidanski <ivmai@mail.ru>
+
+ * java/util/regex/Pattern.java:
+ (quote): Implement new 1.5 Java API method.
+
2011-01-23 Pekka Enberg <penberg@kernel.org>
* java/io/PrintStream.java
diff --git a/java/util/regex/Pattern.java b/java/util/regex/Pattern.java
index 7d1fc84b4..b1c937f78 100644
--- a/java/util/regex/Pattern.java
+++ b/java/util/regex/Pattern.java
@@ -1,5 +1,6 @@
/* Pattern.java -- Compiled regular expression ready to be applied.
- Copyright (C) 2002, 2004, 2005, 2007 Free Software Foundation, Inc.
+ Copyright (C) 2002, 2004, 2005, 2007, 2010
+ Free Software Foundation, Inc.
This file is part of GNU Classpath.
@@ -37,6 +38,8 @@ exception statement from your version. */
package java.util.regex;
+import gnu.java.lang.CPStringBuilder;
+
import gnu.java.util.regex.RE;
import gnu.java.util.regex.REException;
import gnu.java.util.regex.RESyntax;
@@ -260,6 +263,41 @@ public final class Pattern implements Serializable
}
/**
+ * Returns a literal pattern for the specified String.
+ *
+ * @param String to return a literal pattern for.
+ * @return a literal pattern for the specified String.
+ * @exception NullPointerException if str is null.
+ * @since 1.5
+ */
+ public static String quote(String str)
+ {
+ int eInd = str.indexOf("\\E");
+ if (eInd < 0)
+ {
+ // No need to handle backslashes.
+ return "\\Q" + str + "\\E";
+ }
+
+ CPStringBuilder sb = new CPStringBuilder(str.length() + 16);
+ sb.append("\\Q"); // start quote
+
+ int pos = 0;
+ do
+ {
+ // A backslash is quoted by another backslash;
+ // 'E' is not needed to be quoted.
+ sb.append(str.substring(pos, eInd))
+ .append("\\E" + "\\\\" + "E" + "\\Q");
+ pos = eInd + 2;
+ } while ((eInd = str.indexOf("\\E", pos)) >= 0);
+
+ sb.append(str.substring(pos, str.length()))
+ .append("\\E"); // end quote
+ return sb.toString();
+ }
+
+ /**
* Return the regular expression used to construct this object.
* @specnote Prior to JDK 1.5 this method had a different behavior
* @since 1.5