Don't use regexp matching for such a simple case.
[idea/community.git] / platform / util / src / com / intellij / openapi / util / text / StringUtil.java
index c6c97d59bc19ff0d4358be5c0741f4886e5fecf2..c5f438560ed2a281807a8961f44b89646430629a 100644 (file)
@@ -17,7 +17,6 @@ package com.intellij.openapi.util.text;
 
 import com.intellij.CommonBundle;
 import com.intellij.openapi.diagnostic.Logger;
-import com.intellij.openapi.util.Comparing;
 import com.intellij.openapi.util.TextRange;
 import com.intellij.util.ArrayUtil;
 import com.intellij.util.Function;
@@ -39,6 +38,9 @@ public class StringUtil {
   private static final Logger LOG = Logger.getInstance("#com.intellij.openapi.util.text.StringUtil");
   @NonNls private static final String VOWELS = "aeiouy";
 
+  private StringUtil() {
+  }
+
   public static String replace(@NonNls @NotNull String text, @NonNls @NotNull String oldS, @NonNls @Nullable String newS) {
     return replace(text, oldS, newS, false);
   }
@@ -488,6 +490,40 @@ public class StringUtil {
     return s.substring(1, s.length() - 1);
   }
 
+  /**
+   * This is just an optimized version of Matcher.quoteReplacement
+   */
+  public static String quoteReplacement(String s) {
+    boolean needReplacements = false;
+
+    for (int i = 0; i < s.length(); i++) {
+      char c = s.charAt(i);
+      if (c == '\\' || c == '$') {
+        needReplacements = true;
+        break;
+      }
+    }
+
+    if (!needReplacements) return s;
+
+    StringBuilder sb = new StringBuilder(s.length() * 6 / 5);
+    for (int i = 0; i < s.length(); i++) {
+      char c = s.charAt(i);
+      if (c == '\\') {
+        sb.append('\\');
+        sb.append('\\');
+      }
+      else if (c == '$') {
+        sb.append('\\');
+        sb.append('$');
+      }
+      else {
+        sb.append(c);
+      }
+    }
+    return sb.toString();
+  }
+
   private static void unescapeStringCharacters(int length, @NotNull String s, @NotNull StringBuilder buffer) {
     boolean escaped = false;
     for (int idx = 0; idx < length; idx++) {