| OLD | NEW |
| 1 /* | 1 /* |
| 2 * Simplified by Andrey Novikov for AdBlock Plus | 2 * Simplified by Andrey Novikov for AdBlock Plus |
| 3 */ | 3 */ |
| 4 | 4 |
| 5 /* | 5 /* |
| 6 * Licensed to the Apache Software Foundation (ASF) under one or more | 6 * Licensed to the Apache Software Foundation (ASF) under one or more |
| 7 * contributor license agreements. See the NOTICE file distributed with | 7 * contributor license agreements. See the NOTICE file distributed with |
| 8 * this work for additional information regarding copyright ownership. | 8 * this work for additional information regarding copyright ownership. |
| 9 * The ASF licenses this file to You under the Apache License, Version 2.0 | 9 * The ASF licenses this file to You under the Apache License, Version 2.0 |
| 10 * (the "License"); you may not use this file except in compliance with | 10 * (the "License"); you may not use this file except in compliance with |
| 11 * the License. You may obtain a copy of the License at | 11 * the License. You may obtain a copy of the License at |
| 12 * | 12 * |
| 13 * http://www.apache.org/licenses/LICENSE-2.0 | 13 * http://www.apache.org/licenses/LICENSE-2.0 |
| 14 * | 14 * |
| 15 * Unless required by applicable law or agreed to in writing, software | 15 * Unless required by applicable law or agreed to in writing, software |
| 16 * distributed under the License is distributed on an "AS IS" BASIS, | 16 * distributed under the License is distributed on an "AS IS" BASIS, |
| 17 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | 17 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| 18 * See the License for the specific language governing permissions and | 18 * See the License for the specific language governing permissions and |
| 19 * limitations under the License. | 19 * limitations under the License. |
| 20 */ | 20 */ |
| 21 package org.apache.commons.lang; | 21 package org.apache.commons.lang; |
| 22 | 22 |
| 23 /** | 23 /** |
| 24 * <p>Operations on char primitives and Character objects.</p> | 24 * <p>Operations on char primitives and Character objects.</p> |
| 25 * | 25 * |
| 26 * <p>This class tries to handle <code>null</code> input gracefully. | 26 * <p>This class tries to handle <code>null</code> input gracefully. |
| 27 * An exception will not be thrown for a <code>null</code> input. | 27 * An exception will not be thrown for a <code>null</code> input. |
| 28 * Each method documents its behaviour in more detail.</p> | 28 * Each method documents its behaviour in more detail.</p> |
| 29 * | 29 * |
| 30 * @author Stephen Colebourne | 30 * @author Stephen Colebourne |
| 31 * @since 2.1 | 31 * @since 2.1 |
| 32 * @version $Id: CharUtils.java 437554 2006-08-28 06:21:41Z bayard $ | 32 * @version $Id: CharUtils.java 437554 2006-08-28 06:21:41Z bayard $ |
| 33 */ | 33 */ |
| 34 public class CharUtils { | 34 public class CharUtils |
| 35 | 35 { |
| 36 private static final String CHAR_STRING = | 36 private static final String CHAR_STRING = |
| 37 "\u0000\u0001\u0002\u0003\u0004\u0005\u0006\u0007" + | 37 "\u0000\u0001\u0002\u0003\u0004\u0005\u0006\u0007" + |
| 38 "\b\t\n\u000b\f\r\u000e\u000f" + | 38 "\b\t\n\u000b\f\r\u000e\u000f" + |
| 39 "\u0010\u0011\u0012\u0013\u0014\u0015\u0016\u0017" + | 39 "\u0010\u0011\u0012\u0013\u0014\u0015\u0016\u0017" + |
| 40 "\u0018\u0019\u001a\u001b\u001c\u001d\u001e\u001f" + | 40 "\u0018\u0019\u001a\u001b\u001c\u001d\u001e\u001f" + |
| 41 "\u0020\u0021\"\u0023\u0024\u0025\u0026\u0027" + | 41 "\u0020\u0021\"\u0023\u0024\u0025\u0026\u0027" + |
| 42 "\u0028\u0029\u002a\u002b\u002c\u002d\u002e\u002f" + | 42 "\u0028\u0029\u002a\u002b\u002c\u002d\u002e\u002f" + |
| 43 "\u0030\u0031\u0032\u0033\u0034\u0035\u0036\u0037" + | 43 "\u0030\u0031\u0032\u0033\u0034\u0035\u0036\u0037" + |
| 44 "\u0038\u0039\u003a\u003b\u003c\u003d\u003e\u003f" + | 44 "\u0038\u0039\u003a\u003b\u003c\u003d\u003e\u003f" + |
| 45 "\u0040\u0041\u0042\u0043\u0044\u0045\u0046\u0047" + | 45 "\u0040\u0041\u0042\u0043\u0044\u0045\u0046\u0047" + |
| 46 "\u0048\u0049\u004a\u004b\u004c\u004d\u004e\u004f" + | 46 "\u0048\u0049\u004a\u004b\u004c\u004d\u004e\u004f" + |
| 47 "\u0050\u0051\u0052\u0053\u0054\u0055\u0056\u0057" + | 47 "\u0050\u0051\u0052\u0053\u0054\u0055\u0056\u0057" + |
| 48 "\u0058\u0059\u005a\u005b\\\u005d\u005e\u005f" + | 48 "\u0058\u0059\u005a\u005b\\\u005d\u005e\u005f" + |
| 49 "\u0060\u0061\u0062\u0063\u0064\u0065\u0066\u0067" + | 49 "\u0060\u0061\u0062\u0063\u0064\u0065\u0066\u0067" + |
| 50 "\u0068\u0069\u006a\u006b\u006c\u006d\u006e\u006f" + | 50 "\u0068\u0069\u006a\u006b\u006c\u006d\u006e\u006f" + |
| 51 "\u0070\u0071\u0072\u0073\u0074\u0075\u0076\u0077" + | 51 "\u0070\u0071\u0072\u0073\u0074\u0075\u0076\u0077" + |
| 52 "\u0078\u0079\u007a\u007b\u007c\u007d\u007e\u007f"; | 52 "\u0078\u0079\u007a\u007b\u007c\u007d\u007e\u007f"; |
| 53 | 53 |
| 54 private static final String[] CHAR_STRING_ARRAY = new String[128]; | 54 private static final String[] CHAR_STRING_ARRAY = new String[128]; |
| 55 private static final Character[] CHAR_ARRAY = new Character[128]; | 55 private static final Character[] CHAR_ARRAY = new Character[128]; |
| 56 | 56 |
| 57 /** | 57 /** |
| 58 * <code>\u000a</code> linefeed LF ('\n'). | 58 * <code>\u000a</code> linefeed LF ('\n'). |
| 59 * | 59 * |
| 60 * @see <a href="http://java.sun.com/docs/books/jls/third_edition/html/lexic
al.html#101089">JLF: Escape Sequences | 60 * @see <a href="http://java.sun.com/docs/books/jls/third_edition/html/lexical
.html#101089">JLF: Escape Sequences |
| 61 * for Character and String Literals</a> | 61 * for Character and String Literals</a> |
| 62 * @since 2.2 | 62 * @since 2.2 |
| 63 */ | 63 */ |
| 64 public static final char LF = '\n'; | 64 public static final char LF = '\n'; |
| 65 | 65 |
| 66 /** | 66 /** |
| 67 * <code>\u000d</code> carriage return CR ('\r'). | 67 * <code>\u000d</code> carriage return CR ('\r'). |
| 68 * | 68 * |
| 69 * @see <a href="http://java.sun.com/docs/books/jls/third_edition/html/lexic
al.html#101089">JLF: Escape Sequences | 69 * @see <a href="http://java.sun.com/docs/books/jls/third_edition/html/lexical
.html#101089">JLF: Escape Sequences |
| 70 * for Character and String Literals</a> | 70 * for Character and String Literals</a> |
| 71 * @since 2.2 | 71 * @since 2.2 |
| 72 */ | 72 */ |
| 73 public static final char CR = '\r'; | 73 public static final char CR = '\r'; |
| 74 | 74 |
| 75 | 75 static |
| 76 static { | 76 { |
| 77 for (int i = 127; i >= 0; i--) { | 77 for (int i = 127; i >= 0; i--) |
| 78 CHAR_STRING_ARRAY[i] = CHAR_STRING.substring(i, i + 1); | 78 { |
| 79 CHAR_ARRAY[i] = new Character((char) i); | 79 CHAR_STRING_ARRAY[i] = CHAR_STRING.substring(i, i + 1); |
| 80 } | 80 CHAR_ARRAY[i] = new Character((char) i); |
| 81 } | 81 } |
| 82 | 82 } |
| 83 /** | 83 |
| 84 * <p><code>CharUtils</code> instances should NOT be constructed in standard
programming. | 84 /** |
| 85 * Instead, the class should be used as <code>CharUtils.toString('c');</code
>.</p> | 85 * <p><code>CharUtils</code> instances should NOT be constructed in standard p
rogramming. |
| 86 * | 86 * Instead, the class should be used as <code>CharUtils.toString('c');</code>.
</p> |
| 87 * <p>This constructor is public to permit tools that require a JavaBean ins
tance | 87 * |
| 88 * to operate.</p> | 88 * <p>This constructor is public to permit tools that require a JavaBean insta
nce |
| 89 */ | 89 * to operate.</p> |
| 90 public CharUtils() { | 90 */ |
| 91 super(); | 91 public CharUtils() |
| 92 } | 92 { |
| 93 | 93 super(); |
| 94 //----------------------------------------------------------------------- | 94 } |
| 95 /** | 95 |
| 96 * <p>Converts the character to a Character.</p> | 96 //----------------------------------------------------------------------- |
| 97 * | 97 |
| 98 * <p>For ASCII 7 bit characters, this uses a cache that will return the | 98 /** |
| 99 * same Character object each time.</p> | 99 * <p>Converts the character to a Character.</p> |
| 100 * | 100 * |
| 101 * <pre> | 101 * <p>For ASCII 7 bit characters, this uses a cache that will return the |
| 102 * CharUtils.toCharacterObject(' ') = ' ' | 102 * same Character object each time.</p> |
| 103 * CharUtils.toCharacterObject('A') = 'A' | 103 * |
| 104 * </pre> | 104 * <pre> |
| 105 * | 105 * CharUtils.toCharacterObject(' ') = ' ' |
| 106 * @param ch the character to convert | 106 * CharUtils.toCharacterObject('A') = 'A' |
| 107 * @return a Character of the specified character | 107 * </pre> |
| 108 */ | 108 * |
| 109 public static Character toCharacterObject(char ch) { | 109 * @param ch the character to convert |
| 110 if (ch < CHAR_ARRAY.length) { | 110 * @return a Character of the specified character |
| 111 return CHAR_ARRAY[ch]; | 111 */ |
| 112 } | 112 public static Character toCharacterObject(char ch) |
| 113 return new Character(ch); | 113 { |
| 114 } | 114 if (ch < CHAR_ARRAY.length) |
| 115 | 115 { |
| 116 /** | 116 return CHAR_ARRAY[ch]; |
| 117 * <p>Converts the String to a Character using the first character, returnin
g | 117 } |
| 118 * null for empty Strings.</p> | 118 return new Character(ch); |
| 119 * | 119 } |
| 120 * <p>For ASCII 7 bit characters, this uses a cache that will return the | 120 |
| 121 * same Character object each time.</p> | 121 /** |
| 122 * | 122 * <p>Converts the String to a Character using the first character, returning |
| 123 * <pre> | 123 * null for empty Strings.</p> |
| 124 * CharUtils.toCharacterObject(null) = null | 124 * |
| 125 * CharUtils.toCharacterObject("") = null | 125 * <p>For ASCII 7 bit characters, this uses a cache that will return the |
| 126 * CharUtils.toCharacterObject("A") = 'A' | 126 * same Character object each time.</p> |
| 127 * CharUtils.toCharacterObject("BA") = 'B' | 127 * |
| 128 * </pre> | 128 * <pre> |
| 129 * | 129 * CharUtils.toCharacterObject(null) = null |
| 130 * @param str the character to convert | 130 * CharUtils.toCharacterObject("") = null |
| 131 * @return the Character value of the first letter of the String | 131 * CharUtils.toCharacterObject("A") = 'A' |
| 132 */ | 132 * CharUtils.toCharacterObject("BA") = 'B' |
| 133 public static Character toCharacterObject(String str) { | 133 * </pre> |
| 134 if (StringUtils.isEmpty(str)) { | 134 * |
| 135 return null; | 135 * @param str the character to convert |
| 136 } | 136 * @return the Character value of the first letter of the String |
| 137 return toCharacterObject(str.charAt(0)); | 137 */ |
| 138 } | 138 public static Character toCharacterObject(String str) |
| 139 | 139 { |
| 140 //----------------------------------------------------------------------- | 140 if (StringUtils.isEmpty(str)) |
| 141 /** | 141 { |
| 142 * <p>Converts the Character to a char throwing an exception for <code>null<
/code>.</p> | 142 return null; |
| 143 * | 143 } |
| 144 * <pre> | 144 return toCharacterObject(str.charAt(0)); |
| 145 * CharUtils.toChar(null) = IllegalArgumentException | 145 } |
| 146 * CharUtils.toChar(' ') = ' ' | 146 |
| 147 * CharUtils.toChar('A') = 'A' | 147 //----------------------------------------------------------------------- |
| 148 * </pre> | 148 |
| 149 * | 149 /** |
| 150 * @param ch the character to convert | 150 * <p>Converts the Character to a char throwing an exception for <code>null</c
ode>.</p> |
| 151 * @return the char value of the Character | 151 * |
| 152 * @throws IllegalArgumentException if the Character is null | 152 * <pre> |
| 153 */ | 153 * CharUtils.toChar(null) = IllegalArgumentException |
| 154 public static char toChar(Character ch) { | 154 * CharUtils.toChar(' ') = ' ' |
| 155 if (ch == null) { | 155 * CharUtils.toChar('A') = 'A' |
| 156 throw new IllegalArgumentException("The Character must not be null")
; | 156 * </pre> |
| 157 } | 157 * |
| 158 return ch.charValue(); | 158 * @param ch the character to convert |
| 159 } | 159 * @return the char value of the Character |
| 160 | 160 * @throws IllegalArgumentException if the Character is null |
| 161 /** | 161 */ |
| 162 * <p>Converts the Character to a char handling <code>null</code>.</p> | 162 public static char toChar(Character ch) |
| 163 * | 163 { |
| 164 * <pre> | 164 if (ch == null) |
| 165 * CharUtils.toChar(null, 'X') = 'X' | 165 { |
| 166 * CharUtils.toChar(' ', 'X') = ' ' | 166 throw new IllegalArgumentException("The Character must not be null"); |
| 167 * CharUtils.toChar('A', 'X') = 'A' | 167 } |
| 168 * </pre> | 168 return ch.charValue(); |
| 169 * | 169 } |
| 170 * @param ch the character to convert | 170 |
| 171 * @param defaultValue the value to use if the Character is null | 171 /** |
| 172 * @return the char value of the Character or the default if null | 172 * <p>Converts the Character to a char handling <code>null</code>.</p> |
| 173 */ | 173 * |
| 174 public static char toChar(Character ch, char defaultValue) { | 174 * <pre> |
| 175 if (ch == null) { | 175 * CharUtils.toChar(null, 'X') = 'X' |
| 176 return defaultValue; | 176 * CharUtils.toChar(' ', 'X') = ' ' |
| 177 } | 177 * CharUtils.toChar('A', 'X') = 'A' |
| 178 return ch.charValue(); | 178 * </pre> |
| 179 } | 179 * |
| 180 | 180 * @param ch the character to convert |
| 181 //----------------------------------------------------------------------- | 181 * @param defaultValue the value to use if the Character is null |
| 182 /** | 182 * @return the char value of the Character or the default if null |
| 183 * <p>Converts the String to a char using the first character, throwing | 183 */ |
| 184 * an exception on empty Strings.</p> | 184 public static char toChar(Character ch, char defaultValue) |
| 185 * | 185 { |
| 186 * <pre> | 186 if (ch == null) |
| 187 * CharUtils.toChar(null) = IllegalArgumentException | 187 { |
| 188 * CharUtils.toChar("") = IllegalArgumentException | 188 return defaultValue; |
| 189 * CharUtils.toChar("A") = 'A' | 189 } |
| 190 * CharUtils.toChar("BA") = 'B' | 190 return ch.charValue(); |
| 191 * </pre> | 191 } |
| 192 * | 192 |
| 193 * @param str the character to convert | 193 //----------------------------------------------------------------------- |
| 194 * @return the char value of the first letter of the String | 194 |
| 195 * @throws IllegalArgumentException if the String is empty | 195 /** |
| 196 */ | 196 * <p>Converts the String to a char using the first character, throwing |
| 197 public static char toChar(String str) { | 197 * an exception on empty Strings.</p> |
| 198 if (StringUtils.isEmpty(str)) { | 198 * |
| 199 throw new IllegalArgumentException("The String must not be empty"); | 199 * <pre> |
| 200 } | 200 * CharUtils.toChar(null) = IllegalArgumentException |
| 201 return str.charAt(0); | 201 * CharUtils.toChar("") = IllegalArgumentException |
| 202 } | 202 * CharUtils.toChar("A") = 'A' |
| 203 | 203 * CharUtils.toChar("BA") = 'B' |
| 204 /** | 204 * </pre> |
| 205 * <p>Converts the String to a char using the first character, defaulting | 205 * |
| 206 * the value on empty Strings.</p> | 206 * @param str the character to convert |
| 207 * | 207 * @return the char value of the first letter of the String |
| 208 * <pre> | 208 * @throws IllegalArgumentException if the String is empty |
| 209 * CharUtils.toChar(null, 'X') = 'X' | 209 */ |
| 210 * CharUtils.toChar("", 'X') = 'X' | 210 public static char toChar(String str) |
| 211 * CharUtils.toChar("A", 'X') = 'A' | 211 { |
| 212 * CharUtils.toChar("BA", 'X') = 'B' | 212 if (StringUtils.isEmpty(str)) |
| 213 * </pre> | 213 { |
| 214 * | 214 throw new IllegalArgumentException("The String must not be empty"); |
| 215 * @param str the character to convert | 215 } |
| 216 * @param defaultValue the value to use if the Character is null | 216 return str.charAt(0); |
| 217 * @return the char value of the first letter of the String or the default i
f null | 217 } |
| 218 */ | 218 |
| 219 public static char toChar(String str, char defaultValue) { | 219 /** |
| 220 if (StringUtils.isEmpty(str)) { | 220 * <p>Converts the String to a char using the first character, defaulting |
| 221 return defaultValue; | 221 * the value on empty Strings.</p> |
| 222 } | 222 * |
| 223 return str.charAt(0); | 223 * <pre> |
| 224 } | 224 * CharUtils.toChar(null, 'X') = 'X' |
| 225 | 225 * CharUtils.toChar("", 'X') = 'X' |
| 226 //----------------------------------------------------------------------- | 226 * CharUtils.toChar("A", 'X') = 'A' |
| 227 /** | 227 * CharUtils.toChar("BA", 'X') = 'B' |
| 228 * <p>Converts the character to the Integer it represents, throwing an | 228 * </pre> |
| 229 * exception if the character is not numeric.</p> | 229 * |
| 230 * | 230 * @param str the character to convert |
| 231 * <p>This method coverts the char '1' to the int 1 and so on.</p> | 231 * @param defaultValue the value to use if the Character is null |
| 232 * | 232 * @return the char value of the first letter of the String or the default if
null |
| 233 * <pre> | 233 */ |
| 234 * CharUtils.toIntValue('3') = 3 | 234 public static char toChar(String str, char defaultValue) |
| 235 * CharUtils.toIntValue('A') = IllegalArgumentException | 235 { |
| 236 * </pre> | 236 if (StringUtils.isEmpty(str)) |
| 237 * | 237 { |
| 238 * @param ch the character to convert | 238 return defaultValue; |
| 239 * @return the int value of the character | 239 } |
| 240 * @throws IllegalArgumentException if the character is not ASCII numeric | 240 return str.charAt(0); |
| 241 */ | 241 } |
| 242 public static int toIntValue(char ch) { | 242 |
| 243 if (isAsciiNumeric(ch) == false) { | 243 //----------------------------------------------------------------------- |
| 244 throw new IllegalArgumentException("The character " + ch + " is not
in the range '0' - '9'"); | 244 |
| 245 } | 245 /** |
| 246 return ch - 48; | 246 * <p>Converts the character to the Integer it represents, throwing an |
| 247 } | 247 * exception if the character is not numeric.</p> |
| 248 | 248 * |
| 249 /** | 249 * <p>This method coverts the char '1' to the int 1 and so on.</p> |
| 250 * <p>Converts the character to the Integer it represents, throwing an | 250 * |
| 251 * exception if the character is not numeric.</p> | 251 * <pre> |
| 252 * | 252 * CharUtils.toIntValue('3') = 3 |
| 253 * <p>This method coverts the char '1' to the int 1 and so on.</p> | 253 * CharUtils.toIntValue('A') = IllegalArgumentException |
| 254 * | 254 * </pre> |
| 255 * <pre> | 255 * |
| 256 * CharUtils.toIntValue('3', -1) = 3 | 256 * @param ch the character to convert |
| 257 * CharUtils.toIntValue('A', -1) = -1 | 257 * @return the int value of the character |
| 258 * </pre> | 258 * @throws IllegalArgumentException if the character is not ASCII numeric |
| 259 * | 259 */ |
| 260 * @param ch the character to convert | 260 public static int toIntValue(char ch) |
| 261 * @param defaultValue the default value to use if the character is not num
eric | 261 { |
| 262 * @return the int value of the character | 262 if (isAsciiNumeric(ch) == false) |
| 263 */ | 263 { |
| 264 public static int toIntValue(char ch, int defaultValue) { | 264 throw new IllegalArgumentException("The character " + ch + " is not in the
range '0' - '9'"); |
| 265 if (isAsciiNumeric(ch) == false) { | 265 } |
| 266 return defaultValue; | 266 return ch - 48; |
| 267 } | 267 } |
| 268 return ch - 48; | 268 |
| 269 } | 269 /** |
| 270 | 270 * <p>Converts the character to the Integer it represents, throwing an |
| 271 /** | 271 * exception if the character is not numeric.</p> |
| 272 * <p>Converts the character to the Integer it represents, throwing an | 272 * |
| 273 * exception if the character is not numeric.</p> | 273 * <p>This method coverts the char '1' to the int 1 and so on.</p> |
| 274 * | 274 * |
| 275 * <p>This method coverts the char '1' to the int 1 and so on.</p> | 275 * <pre> |
| 276 * | 276 * CharUtils.toIntValue('3', -1) = 3 |
| 277 * <pre> | 277 * CharUtils.toIntValue('A', -1) = -1 |
| 278 * CharUtils.toIntValue(null) = IllegalArgumentException | 278 * </pre> |
| 279 * CharUtils.toIntValue('3') = 3 | 279 * |
| 280 * CharUtils.toIntValue('A') = IllegalArgumentException | 280 * @param ch the character to convert |
| 281 * </pre> | 281 * @param defaultValue the default value to use if the character is not numeri
c |
| 282 * | 282 * @return the int value of the character |
| 283 * @param ch the character to convert, not null | 283 */ |
| 284 * @return the int value of the character | 284 public static int toIntValue(char ch, int defaultValue) |
| 285 * @throws IllegalArgumentException if the Character is not ASCII numeric or
is null | 285 { |
| 286 */ | 286 if (isAsciiNumeric(ch) == false) |
| 287 public static int toIntValue(Character ch) { | 287 { |
| 288 if (ch == null) { | 288 return defaultValue; |
| 289 throw new IllegalArgumentException("The character must not be null")
; | 289 } |
| 290 } | 290 return ch - 48; |
| 291 return toIntValue(ch.charValue()); | 291 } |
| 292 } | 292 |
| 293 | 293 /** |
| 294 /** | 294 * <p>Converts the character to the Integer it represents, throwing an |
| 295 * <p>Converts the character to the Integer it represents, throwing an | 295 * exception if the character is not numeric.</p> |
| 296 * exception if the character is not numeric.</p> | 296 * |
| 297 * | 297 * <p>This method coverts the char '1' to the int 1 and so on.</p> |
| 298 * <p>This method coverts the char '1' to the int 1 and so on.</p> | 298 * |
| 299 * | 299 * <pre> |
| 300 * <pre> | 300 * CharUtils.toIntValue(null) = IllegalArgumentException |
| 301 * CharUtils.toIntValue(null, -1) = -1 | 301 * CharUtils.toIntValue('3') = 3 |
| 302 * CharUtils.toIntValue('3', -1) = 3 | 302 * CharUtils.toIntValue('A') = IllegalArgumentException |
| 303 * CharUtils.toIntValue('A', -1) = -1 | 303 * </pre> |
| 304 * </pre> | 304 * |
| 305 * | 305 * @param ch the character to convert, not null |
| 306 * @param ch the character to convert | 306 * @return the int value of the character |
| 307 * @param defaultValue the default value to use if the character is not num
eric | 307 * @throws IllegalArgumentException if the Character is not ASCII numeric or i
s null |
| 308 * @return the int value of the character | 308 */ |
| 309 */ | 309 public static int toIntValue(Character ch) |
| 310 public static int toIntValue(Character ch, int defaultValue) { | 310 { |
| 311 if (ch == null) { | 311 if (ch == null) |
| 312 return defaultValue; | 312 { |
| 313 } | 313 throw new IllegalArgumentException("The character must not be null"); |
| 314 return toIntValue(ch.charValue(), defaultValue); | 314 } |
| 315 } | 315 return toIntValue(ch.charValue()); |
| 316 | 316 } |
| 317 //----------------------------------------------------------------------- | 317 |
| 318 /** | 318 /** |
| 319 * <p>Converts the character to a String that contains the one character.</p
> | 319 * <p>Converts the character to the Integer it represents, throwing an |
| 320 * | 320 * exception if the character is not numeric.</p> |
| 321 * <p>For ASCII 7 bit characters, this uses a cache that will return the | 321 * |
| 322 * same String object each time.</p> | 322 * <p>This method coverts the char '1' to the int 1 and so on.</p> |
| 323 * | 323 * |
| 324 * <pre> | 324 * <pre> |
| 325 * CharUtils.toString(' ') = " " | 325 * CharUtils.toIntValue(null, -1) = -1 |
| 326 * CharUtils.toString('A') = "A" | 326 * CharUtils.toIntValue('3', -1) = 3 |
| 327 * </pre> | 327 * CharUtils.toIntValue('A', -1) = -1 |
| 328 * | 328 * </pre> |
| 329 * @param ch the character to convert | 329 * |
| 330 * @return a String containing the one specified character | 330 * @param ch the character to convert |
| 331 */ | 331 * @param defaultValue the default value to use if the character is not numeri
c |
| 332 public static String toString(char ch) { | 332 * @return the int value of the character |
| 333 if (ch < 128) { | 333 */ |
| 334 return CHAR_STRING_ARRAY[ch]; | 334 public static int toIntValue(Character ch, int defaultValue) |
| 335 } | 335 { |
| 336 return new String(new char[] {ch}); | 336 if (ch == null) |
| 337 } | 337 { |
| 338 | 338 return defaultValue; |
| 339 /** | 339 } |
| 340 * <p>Converts the character to a String that contains the one character.</p
> | 340 return toIntValue(ch.charValue(), defaultValue); |
| 341 * | 341 } |
| 342 * <p>For ASCII 7 bit characters, this uses a cache that will return the | 342 |
| 343 * same String object each time.</p> | 343 //----------------------------------------------------------------------- |
| 344 * | 344 |
| 345 * <p>If <code>null</code> is passed in, <code>null</code> will be returned.
</p> | 345 /** |
| 346 * | 346 * <p>Converts the character to a String that contains the one character.</p> |
| 347 * <pre> | 347 * |
| 348 * CharUtils.toString(null) = null | 348 * <p>For ASCII 7 bit characters, this uses a cache that will return the |
| 349 * CharUtils.toString(' ') = " " | 349 * same String object each time.</p> |
| 350 * CharUtils.toString('A') = "A" | 350 * |
| 351 * </pre> | 351 * <pre> |
| 352 * | 352 * CharUtils.toString(' ') = " " |
| 353 * @param ch the character to convert | 353 * CharUtils.toString('A') = "A" |
| 354 * @return a String containing the one specified character | 354 * </pre> |
| 355 */ | 355 * |
| 356 public static String toString(Character ch) { | 356 * @param ch the character to convert |
| 357 if (ch == null) { | 357 * @return a String containing the one specified character |
| 358 return null; | 358 */ |
| 359 } | 359 public static String toString(char ch) |
| 360 return toString(ch.charValue()); | 360 { |
| 361 } | 361 if (ch < 128) |
| 362 | 362 { |
| 363 //-------------------------------------------------------------------------- | 363 return CHAR_STRING_ARRAY[ch]; |
| 364 /** | 364 } |
| 365 * <p>Converts the string to the unicode format '\u0020'.</p> | 365 return new String(new char[]{ch}); |
| 366 * | 366 } |
| 367 * <p>This format is the Java source code format.</p> | 367 |
| 368 * | 368 /** |
| 369 * <pre> | 369 * <p>Converts the character to a String that contains the one character.</p> |
| 370 * CharUtils.unicodeEscaped(' ') = "\u0020" | 370 * |
| 371 * CharUtils.unicodeEscaped('A') = "\u0041" | 371 * <p>For ASCII 7 bit characters, this uses a cache that will return the |
| 372 * </pre> | 372 * same String object each time.</p> |
| 373 * | 373 * |
| 374 * @param ch the character to convert | 374 * <p>If <code>null</code> is passed in, <code>null</code> will be returned.</
p> |
| 375 * @return the escaped unicode string | 375 * |
| 376 */ | 376 * <pre> |
| 377 public static String unicodeEscaped(char ch) { | 377 * CharUtils.toString(null) = null |
| 378 if (ch < 0x10) { | 378 * CharUtils.toString(' ') = " " |
| 379 return "\\u000" + Integer.toHexString(ch); | 379 * CharUtils.toString('A') = "A" |
| 380 } else if (ch < 0x100) { | 380 * </pre> |
| 381 return "\\u00" + Integer.toHexString(ch); | 381 * |
| 382 } else if (ch < 0x1000) { | 382 * @param ch the character to convert |
| 383 return "\\u0" + Integer.toHexString(ch); | 383 * @return a String containing the one specified character |
| 384 } | 384 */ |
| 385 return "\\u" + Integer.toHexString(ch); | 385 public static String toString(Character ch) |
| 386 } | 386 { |
| 387 | 387 if (ch == null) |
| 388 /** | 388 { |
| 389 * <p>Converts the string to the unicode format '\u0020'.</p> | 389 return null; |
| 390 * | 390 } |
| 391 * <p>This format is the Java source code format.</p> | 391 return toString(ch.charValue()); |
| 392 * | 392 } |
| 393 * <p>If <code>null</code> is passed in, <code>null</code> will be returned.
</p> | 393 |
| 394 * | 394 //-------------------------------------------------------------------------- |
| 395 * <pre> | 395 |
| 396 * CharUtils.unicodeEscaped(null) = null | 396 /** |
| 397 * CharUtils.unicodeEscaped(' ') = "\u0020" | 397 * <p>Converts the string to the unicode format '\u0020'.</p> |
| 398 * CharUtils.unicodeEscaped('A') = "\u0041" | 398 * |
| 399 * </pre> | 399 * <p>This format is the Java source code format.</p> |
| 400 * | 400 * |
| 401 * @param ch the character to convert, may be null | 401 * <pre> |
| 402 * @return the escaped unicode string, null if null input | 402 * CharUtils.unicodeEscaped(' ') = "\u0020" |
| 403 */ | 403 * CharUtils.unicodeEscaped('A') = "\u0041" |
| 404 public static String unicodeEscaped(Character ch) { | 404 * </pre> |
| 405 if (ch == null) { | 405 * |
| 406 return null; | 406 * @param ch the character to convert |
| 407 } | 407 * @return the escaped unicode string |
| 408 return unicodeEscaped(ch.charValue()); | 408 */ |
| 409 } | 409 public static String unicodeEscaped(char ch) |
| 410 | 410 { |
| 411 //-------------------------------------------------------------------------- | 411 if (ch < 0x10) |
| 412 /** | 412 { |
| 413 * <p>Checks whether the character is ASCII 7 bit.</p> | 413 return "\\u000" + Integer.toHexString(ch); |
| 414 * | 414 } else if (ch < 0x100) |
| 415 * <pre> | 415 { |
| 416 * CharUtils.isAscii('a') = true | 416 return "\\u00" + Integer.toHexString(ch); |
| 417 * CharUtils.isAscii('A') = true | 417 } else if (ch < 0x1000) |
| 418 * CharUtils.isAscii('3') = true | 418 { |
| 419 * CharUtils.isAscii('-') = true | 419 return "\\u0" + Integer.toHexString(ch); |
| 420 * CharUtils.isAscii('\n') = true | 420 } |
| 421 * CharUtils.isAscii('©') = false | 421 return "\\u" + Integer.toHexString(ch); |
| 422 * </pre> | 422 } |
| 423 * | 423 |
| 424 * @param ch the character to check | 424 /** |
| 425 * @return true if less than 128 | 425 * <p>Converts the string to the unicode format '\u0020'.</p> |
| 426 */ | 426 * |
| 427 public static boolean isAscii(char ch) { | 427 * <p>This format is the Java source code format.</p> |
| 428 return ch < 128; | 428 * |
| 429 } | 429 * <p>If <code>null</code> is passed in, <code>null</code> will be returned.</
p> |
| 430 | 430 * |
| 431 /** | 431 * <pre> |
| 432 * <p>Checks whether the character is ASCII 7 bit printable.</p> | 432 * CharUtils.unicodeEscaped(null) = null |
| 433 * | 433 * CharUtils.unicodeEscaped(' ') = "\u0020" |
| 434 * <pre> | 434 * CharUtils.unicodeEscaped('A') = "\u0041" |
| 435 * CharUtils.isAsciiPrintable('a') = true | 435 * </pre> |
| 436 * CharUtils.isAsciiPrintable('A') = true | 436 * |
| 437 * CharUtils.isAsciiPrintable('3') = true | 437 * @param ch the character to convert, may be null |
| 438 * CharUtils.isAsciiPrintable('-') = true | 438 * @return the escaped unicode string, null if null input |
| 439 * CharUtils.isAsciiPrintable('\n') = false | 439 */ |
| 440 * CharUtils.isAsciiPrintable('©') = false | 440 public static String unicodeEscaped(Character ch) |
| 441 * </pre> | 441 { |
| 442 * | 442 if (ch == null) |
| 443 * @param ch the character to check | 443 { |
| 444 * @return true if between 32 and 126 inclusive | 444 return null; |
| 445 */ | 445 } |
| 446 public static boolean isAsciiPrintable(char ch) { | 446 return unicodeEscaped(ch.charValue()); |
| 447 return ch >= 32 && ch < 127; | 447 } |
| 448 } | 448 |
| 449 | 449 //-------------------------------------------------------------------------- |
| 450 /** | 450 |
| 451 * <p>Checks whether the character is ASCII 7 bit control.</p> | 451 /** |
| 452 * | 452 * <p>Checks whether the character is ASCII 7 bit.</p> |
| 453 * <pre> | 453 * |
| 454 * CharUtils.isAsciiControl('a') = false | 454 * <pre> |
| 455 * CharUtils.isAsciiControl('A') = false | 455 * CharUtils.isAscii('a') = true |
| 456 * CharUtils.isAsciiControl('3') = false | 456 * CharUtils.isAscii('A') = true |
| 457 * CharUtils.isAsciiControl('-') = false | 457 * CharUtils.isAscii('3') = true |
| 458 * CharUtils.isAsciiControl('\n') = true | 458 * CharUtils.isAscii('-') = true |
| 459 * CharUtils.isAsciiControl('©') = false | 459 * CharUtils.isAscii('\n') = true |
| 460 * </pre> | 460 * CharUtils.isAscii('©') = false |
| 461 * | 461 * </pre> |
| 462 * @param ch the character to check | 462 * |
| 463 * @return true if less than 32 or equals 127 | 463 * @param ch the character to check |
| 464 */ | 464 * @return true if less than 128 |
| 465 public static boolean isAsciiControl(char ch) { | 465 */ |
| 466 return ch < 32 || ch == 127; | 466 public static boolean isAscii(char ch) |
| 467 } | 467 { |
| 468 | 468 return ch < 128; |
| 469 /** | 469 } |
| 470 * <p>Checks whether the character is ASCII 7 bit alphabetic.</p> | 470 |
| 471 * | 471 /** |
| 472 * <pre> | 472 * <p>Checks whether the character is ASCII 7 bit printable.</p> |
| 473 * CharUtils.isAsciiAlpha('a') = true | 473 * <p/> |
| 474 * CharUtils.isAsciiAlpha('A') = true | 474 * <pre> |
| 475 * CharUtils.isAsciiAlpha('3') = false | 475 * CharUtils.isAsciiPrintable('a') = true |
| 476 * CharUtils.isAsciiAlpha('-') = false | 476 * CharUtils.isAsciiPrintable('A') = true |
| 477 * CharUtils.isAsciiAlpha('\n') = false | 477 * CharUtils.isAsciiPrintable('3') = true |
| 478 * CharUtils.isAsciiAlpha('©') = false | 478 * CharUtils.isAsciiPrintable('-') = true |
| 479 * </pre> | 479 * CharUtils.isAsciiPrintable('\n') = false |
| 480 * | 480 * CharUtils.isAsciiPrintable('©') = false |
| 481 * @param ch the character to check | 481 * </pre> |
| 482 * @return true if between 65 and 90 or 97 and 122 inclusive | 482 * |
| 483 */ | 483 * @param ch the character to check |
| 484 public static boolean isAsciiAlpha(char ch) { | 484 * @return true if between 32 and 126 inclusive |
| 485 return (ch >= 'A' && ch <= 'Z') || (ch >= 'a' && ch <= 'z'); | 485 */ |
| 486 } | 486 public static boolean isAsciiPrintable(char ch) |
| 487 | 487 { |
| 488 /** | 488 return ch >= 32 && ch < 127; |
| 489 * <p>Checks whether the character is ASCII 7 bit alphabetic upper case.</p> | 489 } |
| 490 * | 490 |
| 491 * <pre> | 491 /** |
| 492 * CharUtils.isAsciiAlphaUpper('a') = false | 492 * <p>Checks whether the character is ASCII 7 bit control.</p> |
| 493 * CharUtils.isAsciiAlphaUpper('A') = true | 493 * |
| 494 * CharUtils.isAsciiAlphaUpper('3') = false | 494 * <pre> |
| 495 * CharUtils.isAsciiAlphaUpper('-') = false | 495 * CharUtils.isAsciiControl('a') = false |
| 496 * CharUtils.isAsciiAlphaUpper('\n') = false | 496 * CharUtils.isAsciiControl('A') = false |
| 497 * CharUtils.isAsciiAlphaUpper('©') = false | 497 * CharUtils.isAsciiControl('3') = false |
| 498 * </pre> | 498 * CharUtils.isAsciiControl('-') = false |
| 499 * | 499 * CharUtils.isAsciiControl('\n') = true |
| 500 * @param ch the character to check | 500 * CharUtils.isAsciiControl('©') = false |
| 501 * @return true if between 65 and 90 inclusive | 501 * </pre> |
| 502 */ | 502 * |
| 503 public static boolean isAsciiAlphaUpper(char ch) { | 503 * @param ch the character to check |
| 504 return ch >= 'A' && ch <= 'Z'; | 504 * @return true if less than 32 or equals 127 |
| 505 } | 505 */ |
| 506 | 506 public static boolean isAsciiControl(char ch) |
| 507 /** | 507 { |
| 508 * <p>Checks whether the character is ASCII 7 bit alphabetic lower case.</p> | 508 return ch < 32 || ch == 127; |
| 509 * | 509 } |
| 510 * <pre> | 510 |
| 511 * CharUtils.isAsciiAlphaLower('a') = true | 511 /** |
| 512 * CharUtils.isAsciiAlphaLower('A') = false | 512 * <p>Checks whether the character is ASCII 7 bit alphabetic.</p> |
| 513 * CharUtils.isAsciiAlphaLower('3') = false | 513 * <p/> |
| 514 * CharUtils.isAsciiAlphaLower('-') = false | 514 * <pre> |
| 515 * CharUtils.isAsciiAlphaLower('\n') = false | 515 * CharUtils.isAsciiAlpha('a') = true |
| 516 * CharUtils.isAsciiAlphaLower('©') = false | 516 * CharUtils.isAsciiAlpha('A') = true |
| 517 * </pre> | 517 * CharUtils.isAsciiAlpha('3') = false |
| 518 * | 518 * CharUtils.isAsciiAlpha('-') = false |
| 519 * @param ch the character to check | 519 * CharUtils.isAsciiAlpha('\n') = false |
| 520 * @return true if between 97 and 122 inclusive | 520 * CharUtils.isAsciiAlpha('©') = false |
| 521 */ | 521 * </pre> |
| 522 public static boolean isAsciiAlphaLower(char ch) { | 522 * |
| 523 return ch >= 'a' && ch <= 'z'; | 523 * @param ch the character to check |
| 524 } | 524 * @return true if between 65 and 90 or 97 and 122 inclusive |
| 525 | 525 */ |
| 526 /** | 526 public static boolean isAsciiAlpha(char ch) |
| 527 * <p>Checks whether the character is ASCII 7 bit numeric.</p> | 527 { |
| 528 * | 528 return (ch >= 'A' && ch <= 'Z') || (ch >= 'a' && ch <= 'z'); |
| 529 * <pre> | 529 } |
| 530 * CharUtils.isAsciiNumeric('a') = false | 530 |
| 531 * CharUtils.isAsciiNumeric('A') = false | 531 /** |
| 532 * CharUtils.isAsciiNumeric('3') = true | 532 * <p>Checks whether the character is ASCII 7 bit alphabetic upper case.</p> |
| 533 * CharUtils.isAsciiNumeric('-') = false | 533 * |
| 534 * CharUtils.isAsciiNumeric('\n') = false | 534 * <pre> |
| 535 * CharUtils.isAsciiNumeric('©') = false | 535 * CharUtils.isAsciiAlphaUpper('a') = false |
| 536 * </pre> | 536 * CharUtils.isAsciiAlphaUpper('A') = true |
| 537 * | 537 * CharUtils.isAsciiAlphaUpper('3') = false |
| 538 * @param ch the character to check | 538 * CharUtils.isAsciiAlphaUpper('-') = false |
| 539 * @return true if between 48 and 57 inclusive | 539 * CharUtils.isAsciiAlphaUpper('\n') = false |
| 540 */ | 540 * CharUtils.isAsciiAlphaUpper('©') = false |
| 541 public static boolean isAsciiNumeric(char ch) { | 541 * </pre> |
| 542 return ch >= '0' && ch <= '9'; | 542 * |
| 543 } | 543 * @param ch the character to check |
| 544 | 544 * @return true if between 65 and 90 inclusive |
| 545 /** | 545 */ |
| 546 * <p>Checks whether the character is ASCII 7 bit numeric.</p> | 546 public static boolean isAsciiAlphaUpper(char ch) |
| 547 * | 547 { |
| 548 * <pre> | 548 return ch >= 'A' && ch <= 'Z'; |
| 549 * CharUtils.isAsciiAlphanumeric('a') = true | 549 } |
| 550 * CharUtils.isAsciiAlphanumeric('A') = true | 550 |
| 551 * CharUtils.isAsciiAlphanumeric('3') = true | 551 /** |
| 552 * CharUtils.isAsciiAlphanumeric('-') = false | 552 * <p>Checks whether the character is ASCII 7 bit alphabetic lower case.</p> |
| 553 * CharUtils.isAsciiAlphanumeric('\n') = false | 553 * <p/> |
| 554 * CharUtils.isAsciiAlphanumeric('©') = false | 554 * <pre> |
| 555 * </pre> | 555 * CharUtils.isAsciiAlphaLower('a') = true |
| 556 * | 556 * CharUtils.isAsciiAlphaLower('A') = false |
| 557 * @param ch the character to check | 557 * CharUtils.isAsciiAlphaLower('3') = false |
| 558 * @return true if between 48 and 57 or 65 and 90 or 97 and 122 inclusive | 558 * CharUtils.isAsciiAlphaLower('-') = false |
| 559 */ | 559 * CharUtils.isAsciiAlphaLower('\n') = false |
| 560 public static boolean isAsciiAlphanumeric(char ch) { | 560 * CharUtils.isAsciiAlphaLower('©') = false |
| 561 return (ch >= 'A' && ch <= 'Z') || (ch >= 'a' && ch <= 'z') || (ch >= '0
' && ch <= '9'); | 561 * </pre> |
| 562 } | 562 * |
| 563 | 563 * @param ch the character to check |
| 564 * @return true if between 97 and 122 inclusive |
| 565 */ |
| 566 public static boolean isAsciiAlphaLower(char ch) |
| 567 { |
| 568 return ch >= 'a' && ch <= 'z'; |
| 569 } |
| 570 |
| 571 /** |
| 572 * <p>Checks whether the character is ASCII 7 bit numeric.</p> |
| 573 * |
| 574 * <pre> |
| 575 * CharUtils.isAsciiNumeric('a') = false |
| 576 * CharUtils.isAsciiNumeric('A') = false |
| 577 * CharUtils.isAsciiNumeric('3') = true |
| 578 * CharUtils.isAsciiNumeric('-') = false |
| 579 * CharUtils.isAsciiNumeric('\n') = false |
| 580 * CharUtils.isAsciiNumeric('©') = false |
| 581 * </pre> |
| 582 * |
| 583 * @param ch the character to check |
| 584 * @return true if between 48 and 57 inclusive |
| 585 */ |
| 586 public static boolean isAsciiNumeric(char ch) |
| 587 { |
| 588 return ch >= '0' && ch <= '9'; |
| 589 } |
| 590 |
| 591 /** |
| 592 * <p>Checks whether the character is ASCII 7 bit numeric.</p> |
| 593 * |
| 594 * <pre> |
| 595 * CharUtils.isAsciiAlphanumeric('a') = true |
| 596 * CharUtils.isAsciiAlphanumeric('A') = true |
| 597 * CharUtils.isAsciiAlphanumeric('3') = true |
| 598 * CharUtils.isAsciiAlphanumeric('-') = false |
| 599 * CharUtils.isAsciiAlphanumeric('\n') = false |
| 600 * CharUtils.isAsciiAlphanumeric('©') = false |
| 601 * </pre> |
| 602 * |
| 603 * @param ch the character to check |
| 604 * @return true if between 48 and 57 or 65 and 90 or 97 and 122 inclusive |
| 605 */ |
| 606 public static boolean isAsciiAlphanumeric(char ch) |
| 607 { |
| 608 return (ch >= 'A' && ch <= 'Z') || (ch >= 'a' && ch <= 'z') || (ch >= '0' &&
ch <= '9'); |
| 609 } |
| 610 |
| 564 } | 611 } |
| OLD | NEW |