【问题标题】:Check if array contains string检查数组是否包含字符串
【发布时间】:2015-09-23 17:32:57
【问题描述】:

好的,我有这个程序应该存储有关可用 txt 文件中的 CD 的信息。该文件以“艺术家[标签]专辑”格式将数据存储在同一行。我想做的是让用户输入搜索查询,如果 CD 在数据库中,则程序返回。因此,假设我们在 .txt 文件的某行中有 Green Day[tab]American Idiot,当用户键入 Green 时,程序会检查该文件并返回 true。但我的问题是,我当前的算法要求字符串完全匹配,而不是部分匹配。因此,用户需要输入 Green Day[tab]American Idiot 才能在查询中得到正确的结果。如何解决?谢谢。我确信这是我不认为是初学者的东西。

这是管理数组 Artists 中搜索的程序部分,其中包含当前存储在 .txt 文件中的所有数据

 for (String e : artists){
        if(Arrays.asList(e).contains(search)){
         contains=true;   
        }

【问题讨论】:

  • 使用您当前的数据结构,看起来除了循环遍历数组并在每个字符串上调用 .contains() 之外,没有其他选择。 (这对于小型阵列来说很好,但对于较大的阵列可能会导致性能问题。)

标签: java arrays file search


【解决方案1】:

你为什么要创建一个列表?你应该使用artist.contains(search)(是的,尽量选择更相关的变量名)。还要确保数组中没有 null 元素或 search 不是 null 等,但您可以执行以下操作:

for(String artist : artists) {
    if(artist.toLowerCase().contains(search.toLowerCase()) {
        contains = true;
        // break; <- you may want to break here
    }
}

您可能需要toLowerCase() 进行不区分大小写的搜索。

【讨论】:

  • @TheLaw 那是因为artists 为空(未初始化并分配对象)或您的集合包含空。检查它们。
  • 好吧,我不会读心术,所以你必须详细说明一下。 NPE 表示其中一个变量为空。仔细检查它们中的哪一个以及为什么。也许search 为空。也许您的数组元素之一为空。也许数组本身是空的。等等。
  • 我通过调用方法创建数组,数组中的元素个数由这段代码生成for (int i=0; i
  • 能否在循环前下断点,检查数组内容和search的值?
  • 我这样做了,在到达 NPE 错误之前,两个变量都不为空并且包含正确的数据。
猜你喜欢
  • 2022-06-30
  • 2021-12-14
  • 1970-01-01
  • 2021-06-10
  • 2013-11-20
  • 2013-11-24
  • 2018-10-12
  • 2013-08-16
相关资源
最近更新 更多