package core.framework.api.util;
/**
* @author neo
*/
public final class ASCII {
// only convert ascii chars, faster than JDK String.toUpperCase due to JDK needs to handle UTF and locale
// refers to https://github.com/google/guava/blob/master/guava/src/com/google/common/base/Ascii.java
public static String toUpperCase(String text) {
if (text == null) return null;
int length = text.length();
for (int i = 0; i < length; i++) {
if (isLowerCase(text.charAt(i))) {
char[] chars = text.toCharArray();
for (int j = i; j < length; j++) {
char ch = chars[j];
if (isLowerCase(ch)) {
chars[j] = (char) (ch & 0x5F);
}
}
return String.valueOf(chars);
}
}
return text;
}
public static char toUpperCase(char ch) {
if (isLowerCase(ch)) return (char) (ch & 0x5F);
return ch;
}
public static String toLowerCase(String text) {
if (text == null) return null;
int length = text.length();
for (int i = 0; i < length; i++) {
if (isUpperCase(text.charAt(i))) {
char[] chars = text.toCharArray();
for (int j = i; j < length; j++) {
char ch = chars[j];
if (isUpperCase(ch)) {
chars[j] = (char) (ch ^ 0x20);
}
}
return String.valueOf(chars);
}
}
return text;
}
public static char toLowerCase(char ch) {
if (isUpperCase(ch)) return (char) (ch ^ 0x20);
return ch;
}
public static boolean isLowerCase(char ch) {
return ch >= 'a' && ch <= 'z';
}
public static boolean isUpperCase(char ch) {
return ch >= 'A' && ch <= 'Z';
}
public static boolean isDigit(char ch) {
return ch >= '0' && ch <= '9';
}
public static boolean isLetter(char ch) {
return isLowerCase(ch) || isUpperCase(ch);
}
}