使用正则表达式对arraylist中的多个实例进行java二进制搜索
下面你可以看到我的代码。它从sort.txt读取长度为3的单词,并将它们保存到arraylist中。然后要求用户输入他正在搜索的单词。用户还可以输入与a-z中任何可能的字母匹配的“*” 例如:使用正则表达式对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** 因此,程序
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部分……但在任何位置有通配符时都要这样做。