我目前正在大学攻读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;
}
}
}
}
}
我只是没有得到我期待的输出,我无法弄清楚为什么。
答案 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();
}