遇到情况
用户进行请求搜索的时候,进行会输入不确定性的字符,然后提供给服务端进行模糊查询。譬如:有个参数keyWord
,然后进行中文查询还是英文查询,进行提前处理查询
原先:
<!-- en_name=jack cn_name=杰克 -->
<if test="keyWord != null and keyWord !=''">
and (
en_name like CONCAT('%',#{keyWord},'%')
or cn_name like CONCAT('%',#{keyWord},'%')
)
</if>
- xml改成
<!-- en_name=jack cn_name=杰克 -->
<if test="keyWordEn != null and keyWordEn !=''">
and en_name like CONCAT('%',#{keyWordEn},'%')
</if>
<if test="keyWord != null and keyWord !=''">
and cn_name like CONCAT('%',#{keyWord},'%')
</if>
- 补充参数
//如果非空且不存在中文字符情况下
if (StringUtils.isNotBlank(keyWord) && CheckCnUtil.isNotContainChinese(keyWord)) {
keyWordEn = keyWord;
}
运行效果
方法说明
检查字符串是否包含中文字符&过滤中文字符&提取中文,方法有:判断字符串中是否包含中文,判断一个字符是否是汉字,过滤掉中文,提取中文。
实现代码
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
* @description: 【java】检查字符串是否包含中文字符&过滤中文字符&提取中文
* @author: Lucky
* @create: 2022-09-27 11:06
**/
public class Test07 {
@org.junit.jupiter.api.Test
public void Test1() throws Exception {
String s = "aa_xxx_11_哈喽";
System.out.println("检查【" + s + "】,结果是:" + isContainChinese(s));
System.out.println("检查【" + s + "】,结果是:" + filterChinese(s));
System.out.println("检查【" + s + "】,结果是:" + extractChinese(s));
}
/**
* 判断字符串中是否为非中文字符
*
* @param str 待校验字符串
* @return 是否为非中文字符
*/
public static boolean isNotContainChinese(String str) {
return !isContainChinese(str);
}
/**
* 判断字符串中是否包含中文
*
* @param str 待校验字符串
* @return 是否为中文
* @warn 不能校验是否为中文标点符号
*/
public static boolean isContainChinese(String str) {
Pattern p = Pattern.compile("[\u4e00-\u9fa5]");
Matcher m = p.matcher(str);
if (m.find()) {
return true;
}
return false;
}
/**
* 判断一个字符是否是汉字
* 中文汉字的编码范围:[\u4e00-\u9fa5]
*
* @param c 需要判断的字符
* @return 是汉字(true), 不是汉字(false)
*/
public static boolean isChineseChar(char c) {
return String.valueOf(c).matches("[\u4e00-\u9fa5]");
}
/**
* 过滤掉中文
*
* @param str 待过滤中文的字符串
* @return 过滤掉中文后字符串
*/
public static String filterChinese(String str) {
StringBuffer nonChineseCharacters = new StringBuffer();
if (isContainChinese(str)) {
char[] charArray = str.toCharArray();
for (char tempSaveChar : charArray) {
boolean checkIsChinese = isChineseChar(tempSaveChar);
if (!checkIsChinese) {
nonChineseCharacters.append(tempSaveChar);
}
}
return nonChineseCharacters.toString();
}
return str;
}
/**
* 提取中文
*
* @param str 待提取中文的字符串
* @return 提取中文后字符串
*/
public static String extractChinese(String str) {
StringBuffer extractChineseCharacters = new StringBuffer();
if (isContainChinese(str)) {
char[] charArray = str.toCharArray();
for (char tempSaveChar : charArray) {
boolean checkIsChinese = isChineseChar(tempSaveChar);
if (checkIsChinese) {
extractChineseCharacters.append(tempSaveChar);
}
}
return extractChineseCharacters.toString();
}
return str;
}
}