You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@groovy.apache.org by su...@apache.org on 2017/09/13 13:53:10 UTC
groovy git commit: Use "replace" method from commons-lang3 to improve
performance
Repository: groovy
Updated Branches:
refs/heads/master 9ea35d6aa -> a4f779335
Use "replace" method from commons-lang3 to improve performance
Project: http://git-wip-us.apache.org/repos/asf/groovy/repo
Commit: http://git-wip-us.apache.org/repos/asf/groovy/commit/a4f77933
Tree: http://git-wip-us.apache.org/repos/asf/groovy/tree/a4f77933
Diff: http://git-wip-us.apache.org/repos/asf/groovy/diff/a4f77933
Branch: refs/heads/master
Commit: a4f779335c97d0aa0fe2f42351b13eedf48e6119
Parents: 9ea35d6
Author: sunlan <su...@apache.org>
Authored: Wed Sep 13 21:52:58 2017 +0800
Committer: sunlan <su...@apache.org>
Committed: Wed Sep 13 21:52:58 2017 +0800
----------------------------------------------------------------------
.../groovy/parser/antlr4/util/StringUtils.java | 172 ++++++++++++++++++-
1 file changed, 166 insertions(+), 6 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/groovy/blob/a4f77933/subprojects/parser-antlr4/src/main/java/org/apache/groovy/parser/antlr4/util/StringUtils.java
----------------------------------------------------------------------
diff --git a/subprojects/parser-antlr4/src/main/java/org/apache/groovy/parser/antlr4/util/StringUtils.java b/subprojects/parser-antlr4/src/main/java/org/apache/groovy/parser/antlr4/util/StringUtils.java
index 928f8ab..02b09d4 100644
--- a/subprojects/parser-antlr4/src/main/java/org/apache/groovy/parser/antlr4/util/StringUtils.java
+++ b/subprojects/parser-antlr4/src/main/java/org/apache/groovy/parser/antlr4/util/StringUtils.java
@@ -80,7 +80,7 @@ public class StringUtils {
}
});
- return result.replace("\\\\", "\\");
+ return replace(result,"\\\\", "\\");
}
public static final int NONE_SLASHY = 0;
@@ -93,12 +93,12 @@ public class StringUtils {
text = StringUtils.replaceLineEscape(text);
if (slashyType == SLASHY) {
- text = text.replace("\\/", "/");
+ text = replace(text,"\\/", "/");
}
if (slashyType == DOLLAR_SLASHY) {
- text = text.replace("$$", "$");
- text = text.replace("$/", "/");
+ text = replace(text,"$$", "$");
+ text = replace(text,"$/", "/");
}
} else if (slashyType == NONE_SLASHY) {
@@ -111,7 +111,7 @@ public class StringUtils {
}
private static String replaceEscapes(String text) {
- text = text.replace("\\$", "$");
+ text = replace(text,"\\$", "$");
text = StringUtils.replaceLineEscape(text);
@@ -138,7 +138,7 @@ public class StringUtils {
}
public static String removeCR(String text) {
- return text.replace("\r\n", "\n");
+ return replace(text,"\r\n", "\n");
}
public static long countChar(String text, char c) {
@@ -150,4 +150,164 @@ public class StringUtils {
return length == quotationLength << 1 ? "" : text.substring(quotationLength, length - quotationLength);
}
+
+
+ /**
+ * Copied from Apache commons-lang3-3.6
+ *
+ * <p>Replaces all occurrences of a String within another String.</p>
+ *
+ * <p>A {@code null} reference passed to this method is a no-op.</p>
+ *
+ * <pre>
+ * StringUtils.replace(null, *, *) = null
+ * StringUtils.replace("", *, *) = ""
+ * StringUtils.replace("any", null, *) = "any"
+ * StringUtils.replace("any", *, null) = "any"
+ * StringUtils.replace("any", "", *) = "any"
+ * StringUtils.replace("aba", "a", null) = "aba"
+ * StringUtils.replace("aba", "a", "") = "b"
+ * StringUtils.replace("aba", "a", "z") = "zbz"
+ * </pre>
+ *
+ * @see #replace(String text, String searchString, String replacement, int max)
+ * @param text text to search and replace in, may be null
+ * @param searchString the String to search for, may be null
+ * @param replacement the String to replace it with, may be null
+ * @return the text with any replacements processed,
+ * {@code null} if null String input
+ */
+ public static String replace(final String text, final String searchString, final String replacement) {
+ return replace(text, searchString, replacement, -1);
+ }
+
+ /**
+ * Copied from Apache commons-lang3-3.6
+ *
+ * <p>Replaces a String with another String inside a larger String,
+ * for the first {@code max} values of the search String.</p>
+ *
+ * <p>A {@code null} reference passed to this method is a no-op.</p>
+ *
+ * <pre>
+ * StringUtils.replace(null, *, *, *) = null
+ * StringUtils.replace("", *, *, *) = ""
+ * StringUtils.replace("any", null, *, *) = "any"
+ * StringUtils.replace("any", *, null, *) = "any"
+ * StringUtils.replace("any", "", *, *) = "any"
+ * StringUtils.replace("any", *, *, 0) = "any"
+ * StringUtils.replace("abaa", "a", null, -1) = "abaa"
+ * StringUtils.replace("abaa", "a", "", -1) = "b"
+ * StringUtils.replace("abaa", "a", "z", 0) = "abaa"
+ * StringUtils.replace("abaa", "a", "z", 1) = "zbaa"
+ * StringUtils.replace("abaa", "a", "z", 2) = "zbza"
+ * StringUtils.replace("abaa", "a", "z", -1) = "zbzz"
+ * </pre>
+ *
+ * @param text text to search and replace in, may be null
+ * @param searchString the String to search for, may be null
+ * @param replacement the String to replace it with, may be null
+ * @param max maximum number of values to replace, or {@code -1} if no maximum
+ * @return the text with any replacements processed,
+ * {@code null} if null String input
+ */
+ public static String replace(final String text, final String searchString, final String replacement, final int max) {
+ return replace(text, searchString, replacement, max, false);
+ }
+
+ /**
+ * Copied from Apache commons-lang3-3.6
+ *
+ * <p>Replaces a String with another String inside a larger String,
+ * for the first {@code max} values of the search String,
+ * case sensitively/insensisitively based on {@code ignoreCase} value.</p>
+ *
+ * <p>A {@code null} reference passed to this method is a no-op.</p>
+ *
+ * <pre>
+ * StringUtils.replace(null, *, *, *, false) = null
+ * StringUtils.replace("", *, *, *, false) = ""
+ * StringUtils.replace("any", null, *, *, false) = "any"
+ * StringUtils.replace("any", *, null, *, false) = "any"
+ * StringUtils.replace("any", "", *, *, false) = "any"
+ * StringUtils.replace("any", *, *, 0, false) = "any"
+ * StringUtils.replace("abaa", "a", null, -1, false) = "abaa"
+ * StringUtils.replace("abaa", "a", "", -1, false) = "b"
+ * StringUtils.replace("abaa", "a", "z", 0, false) = "abaa"
+ * StringUtils.replace("abaa", "A", "z", 1, false) = "abaa"
+ * StringUtils.replace("abaa", "A", "z", 1, true) = "zbaa"
+ * StringUtils.replace("abAa", "a", "z", 2, true) = "zbza"
+ * StringUtils.replace("abAa", "a", "z", -1, true) = "zbzz"
+ * </pre>
+ *
+ * @param text text to search and replace in, may be null
+ * @param searchString the String to search for (case insensitive), may be null
+ * @param replacement the String to replace it with, may be null
+ * @param max maximum number of values to replace, or {@code -1} if no maximum
+ * @param ignoreCase if true replace is case insensitive, otherwise case sensitive
+ * @return the text with any replacements processed,
+ * {@code null} if null String input
+ */
+ private static String replace(final String text, String searchString, final String replacement, int max, final boolean ignoreCase) {
+ if (isEmpty(text) || isEmpty(searchString) || replacement == null || max == 0) {
+ return text;
+ }
+ String searchText = text;
+ if (ignoreCase) {
+ searchText = text.toLowerCase();
+ searchString = searchString.toLowerCase();
+ }
+ int start = 0;
+ int end = searchText.indexOf(searchString, start);
+ if (end == INDEX_NOT_FOUND) {
+ return text;
+ }
+ final int replLength = searchString.length();
+ int increase = replacement.length() - replLength;
+ increase = increase < 0 ? 0 : increase;
+ increase *= max < 0 ? 16 : max > 64 ? 64 : max;
+ final StringBuilder buf = new StringBuilder(text.length() + increase);
+ while (end != INDEX_NOT_FOUND) {
+ buf.append(text.substring(start, end)).append(replacement);
+ start = end + replLength;
+ if (--max == 0) {
+ break;
+ }
+ end = searchText.indexOf(searchString, start);
+ }
+ buf.append(text.substring(start));
+ return buf.toString();
+ }
+
+ /**
+ * Copied from Apache commons-lang3-3.6
+ *
+ * <p>Checks if a CharSequence is empty ("") or null.</p>
+ *
+ * <pre>
+ * StringUtils.isEmpty(null) = true
+ * StringUtils.isEmpty("") = true
+ * StringUtils.isEmpty(" ") = false
+ * StringUtils.isEmpty("bob") = false
+ * StringUtils.isEmpty(" bob ") = false
+ * </pre>
+ *
+ * <p>NOTE: This method changed in Lang version 2.0.
+ * It no longer trims the CharSequence.
+ * That functionality is available in isBlank().</p>
+ *
+ * @param cs the CharSequence to check, may be null
+ * @return {@code true} if the CharSequence is empty or null
+ * @since 3.0 Changed signature from isEmpty(String) to isEmpty(CharSequence)
+ */
+ public static boolean isEmpty(final CharSequence cs) {
+ return cs == null || cs.length() == 0;
+ }
+
+ /**
+ * Copied from Apache commons-lang3-3.6
+ *
+ * Represents a failed index search.
+ */
+ private static final int INDEX_NOT_FOUND = -1;
}
\ No newline at end of file