我正面临一个问题。您可以在下面看到我的代码。代码要求用户输入单词的长度。读取程序后,读取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();
}}}
答案 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