首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >CQEngine字符串查询实现

CQEngine字符串查询实现
EN

Stack Overflow用户
提问于 2013-12-08 20:14:20
回答 1查看 375关注 0票数 0

对实例StringEndsWith、StringContains的字符串进行CQEngine查询...使用迭代算法进行匹配运算,你知道为什么不使用正则表达式吗?我认为它是出于性能目的,但对我来说,它的性能是否会优于regex实现并不明显。

示例StringEndsWith:

代码语言:javascript
复制
@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;
}

谢谢你的回答。

EN

回答 1

Stack Overflow用户

发布于 2013-12-08 21:13:54

针对特定函数进行优化比针对通用函数进行优化更容易。

正则表达式匹配通常分两个阶段执行:正则表达式的编译和匹配本身。编译将正则表达式转换为表达式树。在编译期间,正则表达式的每个字符都与所有regex特殊字符进行匹配。编译后,可以遍历表达式树以匹配字符串,而不必每次重新解释整个正则表达式。

那么你认为哪个更快呢?直接编译成字节/机器代码或正则表达式"< stringEndWith >$“的字符串首先需要编译成表达式树,然后需要遍历表达式树才能匹配字符串末尾的字符串?在最好的情况下,更多的是理论而不是实践,编译的正则表达式将与stringEndsWith函数一样快地匹配。这意味着编译步骤仍然会减慢你的程序。

希望这能把事情弄清楚。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20453260

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档