Java - 比较器来搜索子字符串

标签 java search comparator

我正在尝试使用二分搜索来查找包含子字符串的字符串。

ArrayList<String> ch = new ArrayList<String>();
    ch.add("qwerty");
    ch.add("asdfghjkl");
    ch.add("c");
    ch.add("d");
    ch.add("e");
    Comparator<String> comparator = new Comparator<String>() {
        public int compare(String node1, String node2) {
            if (node1.contains(node2)) {
                return 0;
            }
            return node1.indexOf(node2);
        }
    };


    int pos2 = Collections.binarySearch(ch, "sdf", comparator);

是否可以使用二进制搜索而不是使用循环。这给了我一个不正确的索引。

我试图避免使用 string.substring(x,y),其中 x 和 y 是固定值。

最佳答案

Collections.binarySearch方法用于搜索完全匹配,而不是基于某些子字符串或某种方法的匹配。此外,为了使 binarySearch 工作,您应该有一个基于您传递给 binarySearch 方法的 Comparator 的排序数组(尽管,这个在这里并不重要,因为它也不起作用)。

Is it possible to use binarysearch instead of using loop.

我认为不使用循环就不可能做到这一点。如果您确实担心性能,可以编写自己的二分搜索实现,它检查 contains() 而不是相等。

关于Java - 比较器来搜索子字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19410306/

相关文章:

java - Selenium Webdriver(Java) - 从数组中裁剪字符串值

ios - 在联系人应用程序中重新创建 ipad 搜索栏

perl - 如何在 IMAP 邮件主题中搜索非 ASCII 文本

Python - 快速文件搜索

java - 使用两个值 x 和 y 对 java 中的数组进行自定义排序

java - 错误: Comparator is abstract; cannot be instantiated

java - 另一个 rJava 库安装错误 : rJava. rdb' is corrupt

java - 为了用 Guice 注入(inject)一个类,替换的类必须作为对象参数传递给构造函数?

java - 如何在客户端查看JSP文件的来源

android - 带过滤器的自定义 ArrayAdapter 未正确过滤