【问题标题】:How to search in ArrayList? [duplicate]如何在 ArrayList 中搜索? [复制]
【发布时间】:2019-03-15 13:22:36
【问题描述】:

我试着按书名找一本书。

假设存在《丛林》这本书。即使我搜索也想找到它

  • “JunGLE”:作品,
  • “荣格”:作品,
  • “JunG”:不起作用。

希望你能理解。我使用matches 在搜索中添加与该标题匹配的所有书籍。有谁知道如何解决这一问题?

public ArrayList<Book> search(String title){
    ArrayList<Book> matches = new ArrayList<>(); 
    for (Book b : Books){
        String s = b.getTitle();
        if(s.equalsIgnoreCase(title)||s.trim().contains(title))
            matches.add(b);
    }
    return matches;
}

【问题讨论】:

  • 包含方法不区分大小写
  • 为什么是 Jung 而不是 Jung?
  • 基本上将所有内容都转换为大写(或小写)s.toUpperCase().contains(title.toUpperCase())
  • @azro 你是什么意思? “Jung”是原名,我的意思是,如果我用部分名字搜索,我可以找到这本书,但如果我用部分名字搜索但大写(不是原来的名字)不起作用.
  • @Zuzu 你必须更好地解释(编辑你的帖子),你的意思是必须是(相同的单词 zith 不区分大小写)或(部分单词区分大小写)?

标签: java arraylist


【解决方案1】:

contains 是区分大小写的,所以如果你想要一个不区分大小写的搜索,那么一种常用的方法是强制双方为相同大小写(大小写无关紧要,只要你使用两边都一样)。

s.trim().toUpperCase().contains(title.toUpperCase())

【讨论】:

  • Jung 和 JungG 的奇怪区别在这里不起作用,但这是一个很好的解决方案
  • 当然可以,s ("Jungle") 将转换为 "JUNGLE",title ("JunG") 将转换为 JUNG,它包含在 s
  • 这不是不区分大小写的搜索,请参阅stackoverflow.com/a/6996550 了解可能出现问题的案例列表
猜你喜欢
  • 1970-01-01
  • 2014-12-05
  • 2020-12-14
  • 1970-01-01
  • 2013-04-20
  • 1970-01-01
  • 2020-07-24
  • 2012-01-01
  • 2010-11-02
相关资源
最近更新 更多