diff options
author | Benedikt Ritter <britter@apache.org> | 2015-03-13 18:18:59 +0000 |
---|---|---|
committer | Benedikt Ritter <britter@apache.org> | 2015-03-13 18:18:59 +0000 |
commit | 1f75a8f7cc28fef663eaca75e831c9da11ea2b0e (patch) | |
tree | 4982498dd2162e3f9d7088d5266fed9d79f41f59 /src/main/java/org/apache/commons/lang3/CharUtils.java | |
parent | a234f033b67a9068702ea2aa5c87e18dbc4f854b (diff) | |
download | apache-commons-lang-1f75a8f7cc28fef663eaca75e831c9da11ea2b0e.tar.gz |
LANG-877: Performance improvements for StringEscapeUtils. This fixes #49 from github. Thanks to Fabian Lange.
git-svn-id: https://svn.apache.org/repos/asf/commons/proper/lang/trunk@1666535 13f79535-47bb-0310-9956-ffa450edef68
Diffstat (limited to 'src/main/java/org/apache/commons/lang3/CharUtils.java')
-rw-r--r-- | src/main/java/org/apache/commons/lang3/CharUtils.java | 17 |
1 files changed, 9 insertions, 8 deletions
diff --git a/src/main/java/org/apache/commons/lang3/CharUtils.java b/src/main/java/org/apache/commons/lang3/CharUtils.java index 3f19a214e..eb0c2c684 100644 --- a/src/main/java/org/apache/commons/lang3/CharUtils.java +++ b/src/main/java/org/apache/commons/lang3/CharUtils.java @@ -31,6 +31,8 @@ public class CharUtils { private static final String[] CHAR_STRING_ARRAY = new String[128]; + private static final char[] HEX_DIGITS = new char[] {'0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f'}; + /** * {@code \u000a} linefeed LF ('\n'). * @@ -350,14 +352,13 @@ public class CharUtils { * @return the escaped Unicode string */ public static String unicodeEscaped(final char ch) { - if (ch < 0x10) { - return "\\u000" + Integer.toHexString(ch); - } else if (ch < 0x100) { - return "\\u00" + Integer.toHexString(ch); - } else if (ch < 0x1000) { - return "\\u0" + Integer.toHexString(ch); - } - return "\\u" + Integer.toHexString(ch); + StringBuilder sb = new StringBuilder(6); + sb.append("\\u"); + sb.append(HEX_DIGITS[(ch >> 12) & 15]); + sb.append(HEX_DIGITS[(ch >> 8) & 15]); + sb.append(HEX_DIGITS[(ch >> 4) & 15]); + sb.append(HEX_DIGITS[(ch) & 15]); + return sb.toString(); } /** |