Java中英文混排字符串字节个数计算:
/** 双字节字符正则表达达*/
private static final String DOUBLE_CHAR_REG = "[^\\x00-\\xff]";
/**
* 计算字符串字节长度
* @param str
*/
public static int countStringByteLength(String str){
int len = str.length();
Matcher matcher = Pattern.compile(DOUBLE_CHAR_REG).matcher(str);
while (matcher.find()) {
len++;//双字节长度+1
}
return len;
}
==============================================
用户昵称验证用例:
/** "昵称验证"正则表达式*/
private static final String NICKNAME_REG = "^.{6,24}$";
/** "昵称验证"字符个数,为了实现中文匹配两个字符*/
private static final int NICKNAME_MINLEN = 6, NICKNAME_MAXLEN = 24;
/**
* 昵称验证
* @param nickname
* @return
*/
public static boolean isNickname(String nickname) {
if (isEmpty(nickname)) {
return false;
}
//正则表达式匹配字符个数
if (!nickname.matches(NICKNAME_REG)) {
//中英文混排匹配,中文计数+1
int len = countStringByteLength(nickname);
if (len >= NICKNAME_MINLEN && len <= NICKNAME_MAXLEN) {
return true;
}
return false;
}
return true;
}
/**
* 检测字符串是否为空(1.null,2."",3.去除两边空格为"")
* @param str
* @return
*/
public static boolean isEmpty(String str){
if(str== null)return true;
if(str.isEmpty())return true;
if(str.trim().isEmpty())return true;
return false;
}