如何使用用户';在java中输入作为搜索

如何使用用户';在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);

我有一个名为searchtext的文本字段,这是用户的输入。在单击按钮时,我搜索一个列表,其中包含从csv文件导入的9126个值,我希望打印标签上包含用户输入的行

    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");
            }
        }