java从列表读取并返回匹配项

java从列表读取并返回匹配项,java,Java,我面临一个问题。下面你可以看到我的代码。代码要求用户输入单词的长度。读取程序时,读取test.txt并将所有适当长度的字保存到arraylist。接下来我需要的是为用户提供一个选择,让他们输入他正在搜索的单词,比如说输入是D*g。程序将从列表中读取!!not txt文件,从所有可能的数学中搜索并返回它们(exm.Dig、Dag、Dog等)。有什么办法吗 package test; import java.awt.List; import java.io.BufferedReader; impo

我面临一个问题。下面你可以看到我的代码。代码要求用户输入单词的长度。读取程序时,读取test.txt并将所有适当长度的字保存到arraylist。接下来我需要的是为用户提供一个选择,让他们输入他正在搜索的单词,比如说输入是D*g。程序将从列表中读取!!not txt文件,从所有可能的数学中搜索并返回它们(exm.Dig、Dag、Dog等)。有什么办法吗

package test;

import java.awt.List;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Scanner;
import java.util.regex.Pattern;

public class proba {

public static void main(String[] args) {
        ArrayList listA = new ArrayList();
       System.out.println("Vnesi dožino besede, ki jo iščeš");
       Scanner in = new Scanner(System.in);
       int dolzina = in.nextInt();
        try {

            File file = new File("test.txt");
            FileReader fileReader = new FileReader(file);
            BufferedReader bufferedReader = new BufferedReader(fileReader);
            String vrstica;
         while ((vrstica = bufferedReader.readLine()) != null) {    
            if (vrstica.length()==dolzina){
                listA.add(vrstica);
        }
    }                
    System.out.println("Vnesi besedo, za neznano črko vpiši *.");
      Scanner input = new Scanner(System.in);
      String vnos=input.nextLine();

    bufferedReader.close();
    }        
         catch (IOException e) {
                e.printStackTrace();         

 }}}

假设您的用例与您的要求严格相关(简单的表达式,如“D*g”),最简单的解决方案是直接使用match方法,将您的输入作为参数,将*替换为点

....
String vnos=input.nextLine();
vnos = vnos.replace("*","/.");
List<String> results = new ArrayList<String>();
//Iterates on string list
for (int i=0; i<listA.size(); i++){
    String s = (String)listA.get(i);
    if (s.matches(vnos))
        results.add(s);
}
。。。。
字符串vnos=input.nextLine();
vnos=vnos.replace(“*”,“/”);
列表结果=新建ArrayList();
//在字符串列表上迭代

对于(int i=0;i首先,您需要一个正则表达式来进行搜索:

string vnos = input.nextLine();
string myPattern = vnos.replace("*","."); //Replaces * with the wildcard regex character, "."
您可以使用此选项从用户处获取正则表达式。若要在列表中搜索,请使用for循环:

for (int i = 0; i < listA.size(); i++)
{
    if (listA.get(i).matches(myPattern))
    {
        System.out.println(listA.get(i));
    }
}
for(int i=0;i
Regular expressions?是的,但是如何从列表中读取以及用户如何输入单词?一个字符接一个字符?假设D然后输入*然后输入g,然后输入g,然后输入enter?或者它可能是像D*g这样的格式?好的,但不是myPattern=vnos。替换(“,”);替换0个或多个字符?我需要输入*时正好替换1个字符。Dg无法与DoogManager匹配以使其正常工作谢谢