2014-05-23 97 views
0

我有一个TextField,允许用户从Singleton数据库中搜索Employee。每个员工都有名字和姓氏。使用正则表达式过滤FilteredList?

searchBar.textProperty().addListener(
      (observable, oldValue, newValue) -> { 
       filteredList.setPredicate(arg0 -> { 
        String nameString = arg0.getFirst() + arg0.getLast(); 
        nameString = nameString.toUpperCase(); 
        if (arg0.getFirst().toLowerCase() 
         .contains(newValue.toLowerCase()) 
         || arg0.getLast().toLowerCase() 
           .contains(newValue.toLowerCase())) 
        return true; 
        return false; 
       }); 
      }); 

如果我有一个名为“约翰·史密斯”的人,该过滤器将正常工作,如果我搜索: “约翰” “约翰” “史密斯” “史密斯” 但不是 “约翰Smith“ ”Smith John“ ”Smith,John“ 如何正确使用我的搜索查询和正则表达式来查找Employee?例如,查询5个单词,我们可以尝试测试15个子字符串。

JACOB Ĵ 甲 Ç ö 乙 JA AC CO OB JAC COB JACO ACOB

这将是寻找这样每一个可能的匹配远太昂贵。什么是最有效的方法呢?我希望能够以“Johnsmith”或“Smithjo”或类似的东西找到John Smith。

回答

0

你的正则表达式可以像“。(?:约翰|史密斯)。” 我会为它包含单词‘约翰’或单词‘Smith’的任何句子搜索。 是你想要的吗? Nikola