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

时间:2014-10-26 20:14:39

标签: java

我正面临一个问题。您可以在下面看到我的代码。代码要求用户输入单词的长度。读取程序后,读取test.txt并将所有适当长度的单词保存到arraylist中。我接下来需要的是为用户提供输入他正在搜索的单词的选择,假设输入为D * g。程序将从列表中读取!!不是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();         

 }}}

2 个答案:

答案 0 :(得分:1)

首先,您希望使用正则表达式进行搜索:

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));
    }
}

答案 1 :(得分:0)

假设您的用例与您所问的内容严格相关(简单表达式如&#34; D * g&#34;),最简单的解决方案是直接使用匹配将输入作为参数的方法,将*替换为点。

....
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);
}

但是,对于更复杂的情况,您需要自己将用户输入转换为有效的正则表达式(或依赖于库进行转换)。

我建议你一个很好的教程,它可以用来理解Java环境中的正则表达式,以及更复杂的例子。

http://www.vogella.com/tutorials/JavaRegularExpressions/article.html