如何使用用户';在java中输入作为搜索
我有一个名为searchtext的文本字段,这是用户的输入。在单击按钮时,我搜索一个列表,其中包含从csv文件导入的9126个值,我希望打印标签上包含用户输入的行如何使用用户';在java中输入作为搜索,java,list,search,javafx,Java,List,Search,Javafx,我有一个名为searchtext的文本字段,这是用户的输入。在单击按钮时,我搜索一个列表,其中包含从csv文件导入的9126个值,我希望打印标签上包含用户输入的行 public void search(ActionEvent actionEvent) throws IOException{ ArrayList<String> list=new ArrayList<>(); Scanner scanner = new Scanner(file);
public void search(ActionEvent actionEvent) throws IOException{
ArrayList<String> list=new ArrayList<>();
Scanner scanner = new Scanner(file); //I have a file named "something.csv"
while (scanner.hasNextLine()) {
list.add(scanner.nextLine());
} //now i have all 9126 lines in the list
String search = searchtext.getText().replaceAll("\\s", ""); //searchtext is the users input
if (list.contains(search)){
//PRINT THE LINE THAT CONTAINS WHAT THE USER WROTE
}
}
但是如果我不准确地输入
1,玩具总动员(1995),冒险,动画,儿童,喜剧,幻想,那我就得到了“在列表之外”
。因此,我想我的问题是如何创建一个方法,在列表中搜索关键字,并打印出该行。最简单的方法是在所有行中循环,并在找到匹配结果后中断(如果您只对第一个结果感兴趣)
或者,您也可以使用Java8流来查找与条件匹配的第一个元素
String result = list.stream().filter(line -> line.contains(search))
.findFirst()
.orElse(null);
if ( result == null ) {
// HANDLE EMPTY RESULT
return;
}
// DO SOMETHING WITH THE LINE CONTAINING WHAT THE USER WROTE
对于任何可能感兴趣的人
Files.lines(file.toPath()).filter(line->line.contains(search)).findFirst().ifPresent(searchtextarea::setText);代码>仅设置列表可能包含的第一行,即使使用.findAny()
。但是,如果你有更多的行有你要找的词呢
for (int i = 0; i < list.size(); i++) {
if (list.get(i).contains(search)) {
searchtextarea.appendText(list.get(i) + "\n");
}
}
for(int i=0;i
使用这个for循环,我可以得到任何一行有我要找的特定单词的代码。希望这能对某人有所帮助。请注意,list
是一个字符串数组。显然,您需要遍历list
中的每个元素,并在该循环中使用contains
。因此,您不知道如何“打印”或不知道如何找到正确的行来“打印”。此外,“打印”是如此通用,这到底应该做什么?如果list.contains(search)
为真,然后,包含搜索文本的行正好等于search
。因此,您只需要label.setText(搜索)
。但是,也许这不是您想要的逻辑,即使这是您编写的逻辑。或者您正在查找行号(list.indexOf(search)
)?@James\D我编辑了我的问题,我希望现在更清楚如果您使用的是流,您可以完全省略扫描仪和列表:Files.lines(file.toPath()).filter(line->line.contains(search)).findFirst().ifPresent(label::setText);
。当然,假设这是OP想要的。。。
String result = list.stream().filter(line -> line.contains(search))
.findFirst()
.orElse(null);
if ( result == null ) {
// HANDLE EMPTY RESULT
return;
}
// DO SOMETHING WITH THE LINE CONTAINING WHAT THE USER WROTE
for (int i = 0; i < list.size(); i++) {
if (list.get(i).contains(search)) {
searchtextarea.appendText(list.get(i) + "\n");
}
}