0
CQEngine查询字符串的实例StringEndsWith,StringContains ...正在使用迭代算法进行匹配操作你有一个想法,为什么它不是用正则表达式来完成的吗? 我认为它是出于性能目的,但它对我来说不会超越正则表达式的实现。CQEngine字符串查询实现
例StringEndsWith:
@Override
boolean matchesSimpleAttribute(SimpleAttribute<O, A> attribute, O object) {
CharSequence attributeValue = attribute.getValue(object);
return containsFragment(attributeValue, value);
}
@Override
boolean matchesNonSimpleAttribute(Attribute<O, A> attribute, O object) {
for (A attributeValue : attribute.getValues(object)) {
if (containsFragment(attributeValue, value)) {
return true;
}
}
return false;
}
static boolean containsFragment(CharSequence document, CharSequence fragment) {
final int documentLength = document.length();
final int fragmentLength = fragment.length();
final int lastStartOffset = documentLength - fragmentLength;
for (int startOffset = 0; startOffset <= lastStartOffset; startOffset++) {
int charsMatched = 0;
for (int endOffset = startOffset, j = 0; j < fragmentLength; j++, endOffset++) {
char documentChar = document.charAt(endOffset);
char fragmentChar = fragment.charAt(j);
if (documentChar != fragmentChar) {
break; // break inner loop
}
charsMatched++;
}
if (charsMatched == fragmentLength) {
return true;
}
}
return false;
}
谢谢您的回答。