Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用正则表达式对arraylist中的多个实例进行java二进制搜索_Java_Regex_Arraylist - Fatal编程技术网

使用正则表达式对arraylist中的多个实例进行java二进制搜索

使用正则表达式对arraylist中的多个实例进行java二进制搜索,java,regex,arraylist,Java,Regex,Arraylist,下面你可以看到我的代码。它从sort.txt读取长度为3的单词,并将它们保存到arraylist中。然后要求用户输入他正在搜索的单词。用户还可以输入与a-z中任何可能的字母匹配的“*” 例如: My list: [AKP, ALU, ALU, AMD, AMZ, APP, APZ, ARD, AZS, AZS, Ada, Adi, Amy, Ana, Arh, Arh,] 用户输入:ALU 程序返回在1处找到的ALU 这一部分起作用了,问题出在这里 清单是一样的。 用户输入:A** 因此,程序

下面你可以看到我的代码。它从sort.txt读取长度为3的单词,并将它们保存到arraylist中。然后要求用户输入他正在搜索的单词。用户还可以输入与a-z中任何可能的字母匹配的“*”

例如:

My list: [AKP, ALU, ALU, AMD, AMZ, APP, APZ, ARD, AZS, AZS, Ada, Adi, Amy, Ana, Arh, Arh,]
用户输入:ALU

程序返回在1处找到的ALU

这一部分起作用了,问题出在这里

清单是一样的。 用户输入:A**

因此,程序应该返回:

AKP found at 0

ALU found at 1

ALU found at 2

AMD found at 3 
等等

基本上所有的单词都以A开头

拜托,如果有人能帮我的话,那就太棒了,在过去的两个小时里我都被困在这里了

public class proba{


private final static int NOT_FOUND = -1;

public static void main(String[] args) {
    String izbira;
    int dolzina=0;
    Scanner in = new Scanner(System.in);
    String user_input;
    Scanner input = new Scanner(System.in);

    List<String> list3 = new ArrayList<String>();


    try {

        File file = new File("sort.txt");
        FileReader fileReader = new FileReader(file);
        BufferedReader bufferedReader = new BufferedReader(fileReader);
        String vrstica;

        while ((vrstica = bufferedReader.readLine()) != null) {

            if (vrstica.length() == 3) {
                list3.add(vrstica);

            }
        }
        System.out.println(list3);
        do{
            do {
                System.out.println("Enter lenght of word:");
                if (in.hasNextInt()) {
                    dolzina = in.nextInt();
                } else if (in.hasNextLine()) {
                    System.out.printf("Wrong entry!%n ",
                            in.nextLine());
                } 
            } while (dolzina <= 0);

        Collections.sort(list3);

        System.out.println("Enter a word for unknown character enter * :");
        user_input = input.nextLine();
        user_input = user_input.replace("*", ".");

        System.out.println("Sorted list: [length: " + list3.size() + "]");
        System.out.println(list3);


        if (dolzina == 3) {
            if(user_input.charAt(0) != '*') {
                int index = binarySearch(list3, user_input);
                System.out.println("Found" + user_input +" at " + index);
            }
            else 
            for (int i = 0; i < list3.size(); i++) {
                String s = (String) list3.get(i);
                if (s.matches(user_input))
                    System.out.println(s);
            }

        }

        dolzina=-1;
        System.out.println("Ponovni vnos (da/ne):");
        Scanner inn= new Scanner (System.in);
        izbira = inn.next();

    }while (izbira.equalsIgnoreCase("da"));
        bufferedReader.close();
    } catch (IOException e) {
        e.printStackTrace();

    }
}


public static int binarySearch(List<String> integerList, String searchValue) {

int low = 0;
int high = integerList.size() - 1;
int mid = (low + high) / 2;

while (low <= high && !integerList.get(mid).equalsIgnoreCase(searchValue)) {

    if (integerList.get(mid).compareTo(searchValue) < 0) {
        low = mid + 1;
    } else {
        high = mid - 1;
    }

    mid = (low + high) / 2;

    if (low > high) {
        mid = NOT_FOUND;
    }

}
return mid;

 }

 }
公共类proba{
private final static int NOT_FOUND=-1;
公共静态void main(字符串[]args){
字符串izbira;
int-dolzina=0;
扫描仪输入=新扫描仪(系统输入);
字符串用户输入;
扫描仪输入=新扫描仪(System.in);
List list3=新的ArrayList();
试一试{
File File=新文件(“sort.txt”);
FileReader FileReader=新的FileReader(文件);
BufferedReader BufferedReader=新的BufferedReader(文件阅读器);
丝状纹饰;
而((vrstica=bufferedReader.readLine())!=null){
如果(vrstica.length()=3){
清单3.添加(vrstica);
}
}
System.out.println(列表3);
做{
做{
System.out.println(“输入单词长度:”);
if(在.hasNextInt()中){
dolzina=in.nextInt();
}else if(在.hasNextLine()中){
System.out.printf(“输入错误!%n”,
in.nextLine());
} 

}然而(调试时dolzina,您是否看到控件转到以下行:s.matches(user_input))…并失败?换句话说,如果在if上加上一个“else”,它是否会显示列表3中每个条目的else?我知道else目前不起作用,但它并不重要,您编写binarySearch()的方式它试图找到一个精确的匹配。是这样吗?或者你是想做其他事情吗?还有,你在用点替换星号后检查星号,但这不会影响问题。是的,因为我不知道如何编写它来查找所有匹配项*这就是我问的原因。这就是我如何修复它的方法。精确匹配是f因为即使您要更改该方法,它也只返回一个索引,但您希望看到所有匹配项。因此,让代码按照您的意图流向else部分……但在任何位置有通配符时都要这样做。