要求:短字符关键词在目标字符中独立存在(两边均必须只能是字符边界,即非字母或者数字)
例1: 目标字符:AIDFYE 关键词:YE 返回:否; 目标字符YE左侧有字母F接壤
例2: 目标字符:GF&YE 关键词:YE 返回:是; 目标字符匹配到关键词YE,且右侧为字符边界,左侧为符号&(非字母或者数字)
/**
* 判断目标字符串是否包含关键词(只针对短字符)
*
* @param keyWord
* @param target
* @return
*/
private Boolean ifCharacterBoundary(String keyWord, String target) {
// 不包含关键词
if (!target.contains(keyWord)) {
return Boolean.FALSE;
}
// 与关键词完全相等
if (target.equals(keyWord)) {
return Boolean.TRUE;
}
// 目标字符以关键词结尾
if (target.endsWith(keyWord)) {
int endIndex = target.length() - keyWord.length();
if (!endsWithLetterOrDigit(target.substring(0, endIndex))) {
return Boolean.TRUE;
}
}
// 以关键词为参数,分割目标字符
// 若字符数组中,第i个元素不以字母或者数字结尾,且第i+1个元素不以字母或者数字开头,返回true
String[] splitArray = target.split(keyWord);
for (int i = 0; i < splitArray.length - 1; i++) {
if (!endsWithLetterOrDigit(splitArray[i]) && !startsWithLetterOrDigit(splitArray[i + 1])) {
return Boolean.TRUE;
}
}
return Boolean.FALSE;
}
/**
* 判断目标字符是否以字母或者数字结尾
*
* @param info
* @return
*/
private boolean endsWithLetterOrDigit(String info) {
if (StringUtil.isBlank(info)) {
return false;
}
return info.matches(".*[a-zA-Z0-9]");
}
/**
* 判断目标字符是否以字母或者数字开头
*
* @param info
* @return
*/
private boolean startsWithLetterOrDigit(String info) {
if (StringUtil.isBlank(info)) {
return false;
}
return info.matches("^[a-zA-Z0-9].*");
}