一、判空(Empty checks)
1。判断字符串是否为空(为NULL或者为"")
public static boolean isEmpty(String str) {
return str == null || str.length() == 0;
}
2.相应的,有检验字符串不为空的
public static boolean isNotEmpty(String str) {
return !StringUtils.isEmpty(str);
}
3.判断字符串是否为空或者全部为空白字符组成(为NULL或者""或者" ")
public static boolean isBlank(String str) {
int strLen;
if (str == null || (strLen = str.length()) == 0) {
return true;
}
for (int i = 0; i < strLen; i++) {
if ((Character.isWhitespace(str.charAt(i)) == false)) {
return false;
}
}
return true;
}
4.相应的,判断是否非空,非空白字符组成
public static boolean isNotBlank(String str) {
return !StringUtils.isBlank(str);
}
二、去除字符串两端空格(Trim)
1.去除字符串两端空格trim
public static String trim(String str) {
return str == null ? null : str.trim();
}
2.空字符串转化为NULL
public static String trimToNull(String str) {
String ts = trim(str);
return isEmpty(ts) ? null : ts;
}
3.NULL转化为空字符串
public static String trimToEmpty(String str) {
return str == null ? EMPTY : str.trim();
}
三、剥离指定字符(Stripping)
1.剥离首尾空白字符,字符串为NULL时,返回NULL
public static String strip(String str) {
return strip(str, null);
}
2.剥离首尾空白字符,如果字符串全为空白或为NULL,则返回NULL
public static String stripToNull(String str) {
if (str == null) {
return null;
}
str = strip(str, null);
return str.length() == 0 ? null : str;
}
3.剥离首尾空白字符,如果字符串为全空白或者NULL,返回""
public static String stripToEmpty(String str) {
return str == null ? EMPTY : strip(str, null);
}
4.剥离首尾指定字符,如:StringUtils.strip(" abcyx", "xyz") = " abc"
public static String strip(String str, String stripChars) {
if (isEmpty(str)) {
return str;
}
str = stripStart(str, stripChars);
return stripEnd(str, stripChars);
}
5.剥离字符串首指定字符
public static String stripStart(String str, String stripChars) {
int strLen;
if (str == null || (strLen = str.length()) == 0) {
return str;
}
int start = 0;
if (stripChars == null) {
while ((start != strLen) && Character.isWhitespace(str.charAt(start))) {
start++;
}
} else if (stripChars.length() == 0) {
return str;
} else {
while ((start != strLen) && (stripChars.indexOf(str.charAt(start)) != -1)) {
start++;
}
}
return str.substring(start);
}
6.剥离字符串尾指定字符
public static String stripEnd(String str, String stripChars) {
int end;
if (str == null || (end = str.length()) == 0) {
return str;
}
if (stripChars == null) {
while ((end != 0) && Character.isWhitespace(str.charAt(end - 1))) {
end--;
}
} else if (stripChars.length() == 0) {
return str;
} else {
while ((end != 0) && (stripChars.indexOf(str.charAt(end - 1)) != -1)) {
end--;
}
}
return str.substring(0, end);
}
四、剥离数组中指定字符(StripAll)
1.剥离数组中空白字符
public static String[] stripAll(String[] strs) {
return stripAll(strs, null);
}
2.剥离数组中指定字符
public static String[] stripAll(String[] strs, String stripChars) {
int strsLen;
if (strs == null || (strsLen = strs.length) == 0) {
return strs;
}
String[] newArr = new String[strsLen];
for (int i = 0; i < strsLen; i++) {
newArr[i] = strip(strs[i], stripChars);
}
return newArr;
}
五、等于(Equals)
1.equals
public static boolean equals(String str1, String str2) {
return str1 == null ? str2 == null : str1.equals(str2);
}
2.equalsIgnoreCase
public static boolean equalsIgnoreCase(String str1, String str2) {
return str1 == null ? str2 == null : str1.equalsIgnoreCase(str2);
}
六、定位(IndexOf)
1.indexOf
public static int indexOf(String str, char searchChar) {
if (isEmpty(str)) {
return -1;
}
return str.indexOf(searchChar);
}
2.指定起始位置寻址
public static int indexOf(String str, char searchChar, int startPos) {
if (isEmpty(str)) {
return -1;
}
return str.indexOf(searchChar, startPos);
}
3.增加对NULL定位的处理
public static int indexOf(String str, String searchStr) {
if (str == null || searchStr == null) {
return -1;
}
return str.indexOf(searchStr);
}
4.找出指定字符串指定次序的位置
public static int ordinalIndexOf(String str, String searchStr, int ordinal) {
return ordinalIndexOf(str, searchStr, ordinal, false);
}
private static int ordinalIndexOf(String str, String searchStr, int ordinal, boolean lastIndex) {
if (str == null || searchStr == null || ordinal <= 0) {
return INDEX_NOT_FOUND;
}
if (searchStr.length() == 0) {
return lastIndex ? str.length() : 0;
}
int found = 0;
int index = lastIndex ? str.length() : INDEX_NOT_FOUND;
do {
if(lastIndex) {
index = str.lastIndexOf(searchStr, index - 1);
} else {
index = str.indexOf(searchStr, index + 1);
}
if (index < 0) {
return index;
}
found++;
} while (found < ordinal);
return index;
}
5.指定位置开始寻址
public static int indexOf(String str, String searchStr, int startPos) {
if (str == null || searchStr == null) {
return -1;
}
// JDK1.2/JDK1.3 have a bug, when startPos > str.length for "", hence
if (searchStr.length() == 0 && startPos >= str.length()) {
return str.length();
}
return str.indexOf(searchStr, startPos);
}
6.无视字母大小写寻址
public static int indexOfIgnoreCase(String str, String searchStr) {
return indexOfIgnoreCase(str, searchStr, 0);
}
7.从指定位置开始,无视大小写定位
public static int indexOfIgnoreCase(String str, String searchStr, int startPos) {
if (str == null || searchStr == null) {
return -1;
}
if (startPos < 0) {
startPos = 0;
}
int endLimit = (str.length() - searchStr.length()) + 1;
if (startPos > endLimit) {
return -1;
}
if (searchStr.length() == 0) {
return startPos;
}
for (int i = startPos; i < endLimit; i++) {
if (str.regionMatches(true, i, searchStr, 0, searchStr.length())) {
return i;
}
}
return -1;
}
七、LastIndexOf
1.LastIndexOf
public static int lastIndexOf(String str, char searchChar) {
if (isEmpty(str)) {
return -1;
}
return str.lastIndexOf(searchChar);
}
2.指定起始位,寻找最后一个指定字符定位
public static int lastIndexOf(String str, char searchChar, int startPos) {
if (isEmpty(str)) {
return -1;
}
return str.lastIndexOf(searchChar, startPos);
}
3.LastIndexOf,增加对NULL的处理
public static int lastIndexOf(String str, String searchStr) {
if (str == null || searchStr == null) {
return -1;
}
return str.lastIndexOf(searchStr);
}
4.指定次序,指定字符串的倒数顺序定位
public static int lastOrdinalIndexOf(String str, String searchStr, int ordinal) {
return ordinalIndexOf(str, searchStr, ordinal, true);
}
5.LastIndexOf,指定字符开始
public static int lastIndexOf(String str, String searchStr, int startPos) {
if (str == null || searchStr == null) {
return -1;
}
return str.lastIndexOf(searchStr, startPos);
}
6.无视字母大小写,倒序
public static int lastIndexOfIgnoreCase(String str, String searchStr) {
if (str == null || searchStr == null) {
return -1;
}
return lastIndexOfIgnoreCase(str, searchStr, str.length());
}
public static int lastIndexOfIgnoreCase(String str, String searchStr, int startPos) {
if (str == null || searchStr == null) {
return -1;
}
if (startPos > (str.length() - searchStr.length())) {
startPos = str.length() - searchStr.length();
}
if (startPos < 0) {
return -1;
}
if (searchStr.length() == 0) {
return startPos;
}
for (int i = startPos; i >= 0; i--) {
if (str.regionMatches(true, i, searchStr, 0, searchStr.length())) {
return i;
}
}
return -1;
}
八、包含(Contains)
1.判断是否包含某字符,为NULL或者为""时返回false
public static boolean contains(String str, char searchChar) {
if (isEmpty(str)) {
return false;
}
return str.indexOf(searchChar) >= 0;
}
2.判断是否包含某字符串,为NULL时返回false
public static boolean contains(String str, String searchStr) {
if (str == null || searchStr == null) {
return false;
}
return str.indexOf(searchStr) >= 0;
}
3.判断是否包含某字符串,不区分大小写
public static boolean containsIgnoreCase(String str, String searchStr) {
if (str == null || searchStr == null) {
return false;
}
int len = searchStr.length();
int max = str.length() - len;
for (int i = 0; i <= max; i++) {
if (str.regionMatches(true, i, searchStr, 0, len)) {
return true;
}
}
return false;
}
九、指定字符在字符串中的位置(IndexOfAny chars)
1.查找第一个指定字符数组中字符的位置,源字符串为空或者需要查找的字符为空,返回-1
public static int indexOfAny(String str, char[] searchChars) {
if (isEmpty(str) || ArrayUtils.isEmpty(searchChars)) {
return -1;
}
for (int i = 0; i < str.length(); i++) {
char ch = str.charAt(i);
for (int j = 0; j < searchChars.length; j++) {
if (searchChars[j] == ch) {
return i;
}
}
}
return -1;
}
2.查找指定字符串中字符位置
public static int indexOfAny(String str, String searchChars) {
if (isEmpty(str) || isEmpty(searchChars)) {
return -1;
}
return indexOfAny(str, searchChars.toCharArray());
}
十、判断是否包含某字符集中字符(ContainsAny)
1.Checks if the String contains any character in the given set of characters.
public static boolean containsAny(String str, char[] searchChars) {
if (str == null || str.length() == 0 || searchChars == null || searchChars.length == 0) {
return false;
}
for (int i = 0; i < str.length(); i++) {
char ch = str.charAt(i);
for (int j = 0; j < searchChars.length; j++) {
if (searchChars[j] == ch) {
return true;
}
}
}
return false;
}
2.判断是否包含某字符集中字符
public static boolean containsAny(String str, String searchChars) {
if (searchChars == null) {
return false;
}
return containsAny(str, searchChars.toCharArray());
}
十一、不在指定字符集中的字符位置查询(IndexOfAnyBut chars)
1.不在指定字符集中字符位置查询,如果全都在searchChars,或者两参数之一为空,返回-1
public static int indexOfAnyBut(String str, char[] searchChars) {
if (isEmpty(str) || ArrayUtils.isEmpty(searchChars)) {
return -1;
}
outer : for (int i = 0; i < str.length(); i++) {
char ch = str.charAt(i);
for (int j = 0; j < searchChars.length; j++) {
if (searchChars[j] == ch) {
continue outer;
}
}
return i;
}
return -1;
}
public static int indexOfAnyBut(String str, String searchChars) {
if (isEmpty(str) || isEmpty(searchChars)) {
return -1;
}
for (int i = 0; i < str.length(); i++) {
if (searchChars.indexOf(str.charAt(i)) < 0) {
return i;
}
}
return -1;
}
十二、判断是否包含指定字符以为的字符(ContainsOnly)
1.判断是否只包含指定字符的字符,如果包含,返回TRUE,如果不包含,返回false
public static boolean containsOnly(String str, char[] valid) {
// All these pre-checks are to maintain API with an older version
if ((valid == null) || (str == null)) {
return false;
}
if (str.length() == 0) {
return true;
}
if (valid.length == 0) {
return false;
}
return indexOfAnyBut(str, valid) == -1;
}
2.判断字符串是否只包含指定字符
public static boolean containsOnly(String str, String validChars) {
if (str == null || validChars == null) {
return false;
}
return containsOnly(str, validChars.toCharArray());
}
十三、检查字符串是否不包括指定字符(ContainsNone)
1.检查字符串是否不包括指定字符,参数为空或者不包含指定字符,则返回true,否则返回false
public static boolean containsNone(String str, char[] invalidChars) {
if (str == null || invalidChars == null) {
return true;
}
int strSize = str.length();
int validSize = invalidChars.length;
for (int i = 0; i < strSize; i++) {
char ch = str.charAt(i);
for (int j = 0; j < validSize; j++) {
if (invalidChars[j] == ch) {
return false;
}
}
}
return true;
}
public static boolean containsNone(String str, String invalidChars) {
if (str == null || invalidChars == null) {
return true;
}
return containsNone(str, invalidChars.toCharArray());
}
十四、找出指定字符串在字符串中的位置(IndexOfAny strings)
1.Find the first index of any of a set of potential substrings.
public static int indexOfAny(String str, String[] searchStrs) {
if ((str == null) || (searchStrs == null)) {
return -1;
}
int sz = searchStrs.length;
// String's can't have a MAX_VALUEth index.
int ret = Integer.MAX_VALUE;
int tmp = 0;
for (int i = 0; i < sz; i++) {
String search = searchStrs[i];
if (search == null) {
continue;
}
tmp = str.indexOf(search);
if (tmp == -1) {
continue;
}
if (tmp < ret) {
ret = tmp;
}
}
return (ret == Integer.MAX_VALUE) ? -1 : ret;
}
2.Find the latest index of any of a set of potential substrings.
public static int lastIndexOfAny(String str, String[] searchStrs) {
if ((str == null) || (searchStrs == null)) {
return -1;
}
int sz = searchStrs.length;
int ret = -1;
int tmp = 0;
for (int i = 0; i < sz; i++) {
String search = searchStrs[i];
if (search == null) {
continue;
}
tmp = str.lastIndexOf(search);
if (tmp > ret) {
ret = tmp;
}
}
return ret;
}