Home > database >  how to search for series of strings in a sentence in kotlin
how to search for series of strings in a sentence in kotlin

Time:11-05

I have an ArrayList of items. Each item has long strings for example ("The cat is in the hat","It's warm outside","It's cold outside")

what I am trying to do is search for a series of strings for example "It's outside" in any given order in the ArrayList above and it should find 2 of them.

This is what I tried:

fun clickItem(criteria: String) {
  productList = productListAll.filter {it: Data
     it.title.contains(criteria, ignoreCase = true) 
  }
} as ArrayList<Data>

This works fine when the words I am looking for are in sequence. However, I am trying to get strings in any given order. Does anyone know how to accomplish that?

CodePudding user response:

We can do this by splitting title and criteria by whitespaces to create a set of words. Then we use containsAll() to check if title contains all of words from criteria. Additionally, we need to convert both of them to lowercase (or uppercase), so the search will be case-insensitive:

private val whitespace = Regex("\\s ")

fun clickItem(criteria: String): List<Data> {
    val criteriaWords = criteria.lowercase().split(whitespace).toSet()

    return productListAll.filter {
        it.title.lowercase().split(whitespace).containsAll(criteriaWords)
    }
}

Note that searching through text is not that trivial, so simple solutions will be always limited. For example, we won't find "it's" when searching for "it is", etc.

  • Related