2014-10-26 27 views
-1

我正面临一个问题。在下面你可以看到我的代码。代码要求用户输入单词的长度。读取程序时,请阅读test.txt并将适当长度的所有单词保存到ArrayList中。接下来我需要的是为用户提供一个选择来输入一个他正在搜索的单词可以说输入是D * g。程序将从列表中读取!而不是txt文件,并从所有可能的mathces中搜索并返回它们(例如Dig,Dag,Dog,...)。任何想法如何做到这一点?java从列表中读取并返回匹配项

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

}}} 
+0

正则表达式? – duffymo 2014-10-26 20:17:35

+0

是的,但如何从列表 – 2014-10-26 20:26:31

+0

中读取以及用户如何输入单词?字符一个字符?让我们说D然后输入*然后输入g进入?或者它可能像D * g一样? – 2014-10-26 20:27:56

回答

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

好,但没有myPattern = vnos.replace(“*”,“。”);替换0个或更多个字符?我需要输入*来替换1个字符。 D * g无法与Doog匹配 – 2014-10-26 21:32:00

0

假设你的用例是严格地与你问什么(如“d * G”简单的表达式),最简单的办法是使用直接比赛方法与你的输入作为参数,用点代替*。

.... 
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

+0

设法使它工作谢谢 – 2014-10-26 21:51:01

相关问题