从用户输入中搜索文本文件中的名称列表

时间:2016-02-28 18:43:23

标签: java java.util.scanner

我目前正在大学攻读Java课程,我遇到了一些麻烦。上学期我们从Python开始,我对它非常熟悉,我会说我现在精通Python编写;但Java是另一个故事。事情有很多不同。无论如何,这是我当前的任务:我需要编写一个类来搜索文本文档(作为参数传递),搜索用户输入的名称,并输出名称是否在列表中。文本文档的第一行是列表中的名称数量。 文本文件:

    14 
Christian 
Vincent 
Joseph 
Usman
 Andrew
 James 
Ali 
Narain
 Chengjun 
Marvin 
Frank 
Jason
 Reza 
David

我的代码:

import java.util.*;
import java.io.*;

public class DbLookup{

    public static void main(String[]args) throws IOException{
        File inputDataFile = new File(args[0]);
        Scanner stdin = new Scanner(System.in);
        Scanner inFile = new Scanner(inputDataFile);
        int length = inFile.nextInt();
        String names[] = new String[length];

        for(int i=0;i<length;i++){
            names[i] = inFile.nextLine();
        }
        System.out.println("Please enter a name that you would like to search for: ");
        while(stdin.hasNext()){
            System.out.println("Please enter a name that you would like to search for: ");
            String input = stdin.next();
            for(int i = 0;i<length;i++){
                if(input.equalsIgnoreCase(names[i])){
                    System.out.println("We found "+names[i]+" in our database!");
                    break;
                }else{
                    continue;
                }
            }
        }
    }   
}

我只是没有得到我期待的输出,我无法弄清楚为什么。

3 个答案:

答案 0 :(得分:1)

试试这个 您应该trim()您的值,因为它们有额外的空格

 if(input.trim().equalsIgnoreCase(names[i].trim()))

我已经运行了您使用trim()后运行完美的示例,您错过了trim()

答案 1 :(得分:0)

创建一个单独的scanner类来逐行阅读。您也可以使用BufferedReader

final Scanner scanner = new Scanner(file);
while (scanner.hasNextLine()) {
   final String str= scanner.nextLine();
   if(str.contains(name)) { 
       // Found the input word
       System.out.println("I found " +name+ " in file " +file.getName());
       break;
   }
}

答案 2 :(得分:0)

如果您使用Java 8:

String[] names;
try (Stream<String> stream = Files.lines(Paths.get(fileName))) {
    names = stream.skip(1).toArray(size -> new String[size]);
} catch (IOException e) {
    e.printStackTrace();
}