2014-10-26 67 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

相關問題