扫描文本文件以查找Java中String []中的单词

时间:2015-04-17 16:57:26

标签: java search

我在尝试创建一个方法时遇到问题,该方法在文本文件中搜索String数组中的两个或多个匹配单词,然后使用匹配的关键字打印出找到的句子。在某些情况下,如果用户只输入一个匹配的关键字,则该方法可以打印出该句子。如果用户输入两个匹配的单词,则打印具有这两个匹配单词的句子。我的问题是返回两个或多个找到的匹配关键字。到目前为止,我只能用一个关键字搜索文本文件。所以,例如,如果我的文本文件包含“地面是你左边门”和“地面在这里”。然后用户进入“地面门”,返回“地面在你左边的门旁边”,“地面在这里”的句子。我的目标是只返回“你左边的门旁边的地面”。我的匹配单词是

 String [ ] matchwords = {"ground","level","Back", "toll","chair"};

这是我搜索文本文件的搜索方法。

public static void SearchFile(String go) throws FileNotFoundException {
    File file = new File("bingo.txt");

    Scanner scanner = new Scanner(file);
    while (scanner.hasNextLine()) 
    {
        final String fileline = scanner.nextLine();
        if (fileline.contains(go)) {
            System.out.println(fileline);

        }

    }
}

在我的主要方法中,我调用SearchFile函数就在这里。

      public static void main(String args[]) throws ParseException, IOException {
    /* Initialization */

     String [ ] matchwords = {"ground","level","Back", "toll","chair"};


    Scanner in = new Scanner(System.in);
    Scanner scanner = new Scanner(System.in);
    String input = null;

    System.out.println("Welcome To the DataBase ");
    System.out.println("What would you like to know?");

        System.out.print("> ");
        input = scanner.nextLine().toLowerCase();


        boolean match = true;
        for (int i = 0; i < matchwords.length && match; i++) {
            //match = input.contains(matchwords[i]);
            if (input.contains(matchwords[i]))  {

                SearchFile(matchwords[i]);
 }
    }

   }

有什么建议吗?

2 个答案:

答案 0 :(得分:0)

static String [ ] matchwords = {"ground","level","Back", "toll","chair"};
static List wordList = Arrays.asList(matchwords);

public static void main(String []stg){
    Scanner console = new Scanner(System.in);
    String input = console.nextLine().toLowerCase();
    List line = Arrays.asList(input.split(" "));
    int noOfWords =0;

    noOfWords = checkWord(line, noOfWords);
    System.out.println("Matched words in a single line : "+noOfWords);
}

public static int checkWord(List list, int counter){
    for(int i=0;i<list.size();i++)
        if(wordList.contains(list.get(i))){
            list.remove(i);
            checkWord(list, counter);
            counter++;
        }

    return counter;
}

答案 1 :(得分:-1)

我会反转循环顺序。遍历文件并在每一行上查找适当数量的匹配单词。然后在有足够的匹配后立即打印该行。你编写这个代码的方式,你必须为每个可能的匹配单词遍历每个文件一次,然后关联结果以找到那些将按最小匹配数打印的行