如何实现二进制搜索方法以在两个不同的文本文件中查找匹配的字符串

时间:2017-06-03 16:20:11

标签: java binary-search-tree string-matching

所以我有两个不同的文本文件。第一个文本文件包含:

Apple
Banana
Berry
Lemon
Orange

第二个包含:

Banana
Juice
Kiwi
Strawberry
Water

我要输出的匹配字符串是" banana"。我知道如何使用hashsets,arraylists等实现它。但我想使用二进制搜索方法。但我一直陷入困境,因为我没有处理整数,而是处理字符串。以下是我到目前为止的情况:

public static boolean BinarySearch() throws FileNotFoundException {
        String compare;

        java.io.File firstlist= new java.io.File("firstlist.txt");
        Scanner scanner1= new Scanner(firstlist);

        java.io.File secondlist= new java.io.File("secondlist.txt");
        Scanner scanner2= new Scanner(secondlist);

        ArrayList<String> list= new ArrayList<>();
        while (scanner2.hasNextLine()){
            names.add(scanner2.nextLine());
        }

        int low =0;
        int high = list.size() -1;

        for(int i=0; i<list.size(); i++){
            compare=scanner1.nextLine();
            scanner2= new Scanner(list);

            while (high>=low){
                int middle = (low+high)/2;
                if (list.get(middle) == list.get(0)){
                    return 1;
                }
                if (list.get(middle) < list.get(0))
            }

        }
    }

2 个答案:

答案 0 :(得分:0)

您无法将两个strings与运营商进行比较。

String a, b;

a == b检查a和b是否为 SAME OBJECT 。这总是错误的。

相反,请使用String.equals((String) a).equalsIgnoreCase()方法。

答案 1 :(得分:0)

二元搜索的两个主要思想:

  • 排序列表
  • 比较功能

据我所知,文件中的字符串使用字母顺序排序。当您对左侧或右侧部分进行设置时,String.compareTo是二进制搜索所需的内容:

while (leftIndex < rightIndex) {
    int middleIndex = (rightIndex + leftIndex) / 2;
    String middle = strings[middleIndex];
    if (target.compareTo(middle) < 0) {
        rightIndex = middleIndex;
    } else {
        leftIndex = middle;
    }
}