我正在制作一个搜索引擎,以查找哪个文档与用户提供的字词匹配。以下是我的代码。这是我的方法,它实际上采取用户输入,我将稍微添加到它进行搜索,但我试图测试这么多(这就是为什么它打印输出)看看它是否但仍然可以接受输入。我可以更改什么,以便它需要尽可能多的单词,直到他们留下一行空白?我让它在10点停止,但我认为hasNext()会在它们留空线时停止它,但它只是继续扫描。
Scanner userInput = new Scanner(System.in);
System.out.println("\n\n\nEnter the words you would like to search your documents for (up to 10):");
String[] stringArray = new String[10];
int i = 0;
while (userInput.hasNext() && i < 9){//takes input until user leaves a blank line
stringArray[i] = userInput.next();
i++;
}
for (int j = 0; j < i; j++){//just for testing purposes
System.out.println(stringArray[j]);
}
答案 0 :(得分:1)
String line;
int i = 0;
while(!(line = userInput.nextLine()).isEmpty()) {
for (String word :line.split("\\s+")){
stringArray[i]=word;
i++;
}
}
此代码将Scanner
中的每一行分配给变量line
,直到用户输入为空。在每次迭代中,它会将line
拆分为单词并分配给stringArray
。
答案 1 :(得分:0)
将您的while循环更改为:
while (!(String temp = userInput.nextLine()).trim().contentEquals("")) {
stringArray[i] = userInput.next();
i++;
}
答案 2 :(得分:0)
hasNext()
&amp; next()
停止言语,而不是行。使用您的代码,用户可以将所有10个单词放在同一行上,然后就可以完成了。此外,这些方法将跳过所有空格,包括换行符,直到找到下一个单词。您无法使用hasNext()
查找空行,next()
永远不会返回空字符串。您想要hasNextLine()
和nextLine()
。
Scanner userInput = new Scanner(System.in);
System.out.println("\n\n\nEnter the words you would like to search your documents for (up to 10):");
String[] stringArray = new String[10];
int i = 0;
while (i < stringArray.length
&& userInput.hasNextLine()
&& !(stringArray[i] = userInput.nextLine().trim()).isEmpty()) {
i++;
}
for (int j = 0; j < i; j++) { // just for testing purposes
System.out.println(stringArray[j]);
}
但为什么要限制自己只有10行?您可以使用ArrayList来获得更大的灵活性:
Scanner userInput = new Scanner(System.in);
System.out.println("\n\n\nEnter the words you would like to search your documents for:");
List<String> stringList = new ArrayList<>();
String line;
while (userInput.hasNextLine()
&& !(line = userInput.nextLine().trim()).isEmpty()) {
stringList.add(line);
}
stringList.forEach(System.out::println); // just for testing purposes