/**
* 字符串工具
*
* @author chenwc
* @date 2023/3/2 21:09
*/
public class StringUtils {
/**
* 半角和全角除空格外的字符偏移量是65248
*/
private final static Integer CharacterOffset = 65248;
/**
* 判断字符串是否为空
*
* @param str 字符串
* @return 为空返回true,不为空返回false
*/
public static boolean isEmpty(String str) {
return null == str || str.isEmpty();
}
/**
* 判断字符串是否不为空
*
* @param str 字符串
* @return 不为空返回true,为空返回false
*/
public static boolean isNotEmpty(String str) {
return !isEmpty(str);
}
/**
* 判断字符串是否包含小写字母
*
* @param str 字符串
* @return 包含返回true,不包含返回false
*/
public static boolean isContainsLowercaseLetters(String str) {
boolean flag = false;
for (char c : str.toCharArray()) {
if (c >= 'a' && c <= 'z') {
flag = true;
break;
}
}
return flag;
}
/**
* 判断字符串是否包含大写字母
*
* @param str 字符串
* @return 包含返回true,不包含返回false
*/
public static boolean isContainsUppercaseLetters(String str) {
boolean flag = false;
for (char c : str.toCharArray()) {
if (c >= 'A' && c <= 'Z') {
flag = true;
break;
}
}
return flag;
}
/**
* 判断字符串是否包含字母
*
* @param str 字符串
* @return 包含返回true,不包含返回false
*/
public static boolean isContainsLetters(String str) {
return (isContainsUppercaseLetters(str) || isContainsLowercaseLetters(str));
}
/**
* 判断字符串是否包含数字
*
* @param str 字符串
* @return 包含返回true,不包含返回false
*/
public static boolean isContainsNumbers(String str) {
boolean flag = false;
for (char c : str.toCharArray()) {
if (c >= '0' && c <= '9') {
flag = true;
break;
}
}
return flag;
}
/**
* 判断字符串是否包含全角符号
* 全角字符是从65281开始到65374结束,全角空格是12288
*
* @param str 字符串
* @return 包含返回true,不包含返回false
*/
public static boolean isContainsFullWidthSymbol(String str) {
boolean flag = false;
for (char c : str.toCharArray()) {
if ((c >= 65281 && c <= 65374) || c == 12288) {
flag = true;
break;
}
}
return flag;
}
/**
* 全角符号转半角符号
*
* @param str 字符串
* @return 转换后的字符串
*/
public static String changeFullWidthToHalfWidthSymbol(String str) {
char[] halfWidth = new char[str.length()];
for (int i = 0; i < str.length(); i++) {
char c = str.charAt(i);
if (c >= 65281 && c <= 65374) {
halfWidth[i] = (char) (c - CharacterOffset);
} else if (c == 12288) {
halfWidth[i] = 32;
} else {
halfWidth[i] = c;
}
}
return new String(halfWidth);
}
/**
* 判断字符串是否包含半角符号
* 半角字符是从32(空格)开始到126结束
*
* @param str 字符串
* @return 包含返回true,不包含返回false
*/
public static boolean isContainsHalfWidthSymbol(String str) {
boolean flag = false;
for (char c : str.toCharArray()) {
if (c >= 32 && c <= 126) {
flag = true;
break;
}
}
return flag;
}
/**
* 半角符号转全角符号
*
* @param str 字符串
* @return 转换后的字符串
*/
public static String changeHalfWidthToFullWidthSymbol(String str) {
char[] halfWidth = new char[str.length()];
for (int i = 0; i < str.length(); i++) {
char c = str.charAt(i);
if (c >= 33 && c <= 126) {
halfWidth[i] = (char) (c + CharacterOffset);
} else if (c == 32) {
halfWidth[i] = 12288;
} else {
halfWidth[i] = c;
}
}
return new String(halfWidth);
}
/**
* 去除字符串中的汉字
*
* @param str 字符串
* @return 转换后的字符串
*/
public static String removeChineseCharacters(String str) {
return str.replaceAll("[\u4e00-\u9fa5]", "");
}
/**
* 截取出字符串中的汉字
*
* @param str 字符串
* @return 转换后的字符串
*/
public static String InterceptChineseCharacters(String str) {
StringBuilder test = new StringBuilder();
for (char charsSs : str.toCharArray()) {
String temp = String.valueOf(charsSs);
// 判断是汉字
if (temp.matches("[\u4e00-\u9fa5]")) {
test.append(temp);
}
}
return test.toString();
}
}