使用Kotlin查找数组中最后一次出现的字符串

我有这个数组: ["cat", "dog", "lion", "tiger", "dog", "rabbit"]

  • 我怎样才能找到第一个 “狗”的位置

  • 我怎样才能找到最后的 “狗”的位置

  • 当我搜索不在数组中的东西时,如何抛出一个错误

目前,我有一个for循环,但我有打印位置的困难。

对于在数组中找到第一个最后一个出现的问题,在Kotlin中根本不需要使用for循环,只需使用indexOflastIndexOf

至于抛出一个错误,你可以抛出一个异常,如果indexOf返回-1 ,观察:

 import java.util.Arrays fun main(args: Array<String>) { // Declaring array val wordArray = arrayOf("cat", "dog", "lion", "tiger", "dog", "rabbit") // Declaring search word var searchWord = "dog" // Finding position of first occurence var firstOccurence = wordArray.indexOf(searchWord) // Finding position of last occurence var lastOccurence = wordArray.lastIndexOf(searchWord) println(Arrays.toString(wordArray)) println("\"$searchWord\" first occurs at index $firstOccurence of the array") println("\"$searchWord\" last occurs at index $lastOccurence of the array") //Testing something that does not occur in the array searchWord = "bear" var index = wordArray.indexOf(searchWord) if (index == -1) throw Exception("Error: \"$searchWord\" does not occur in the array") } 

产量

 [cat, dog, lion, tiger, dog, rabbit] "dog" first occurs at index 1 of the array "dog" last occurs at index 4 of the array java.lang.Exception: Error: "bear" does not occur in the array 

@ shash678给了什么最有用的答案,但更多可能是有用的取决于更多的问题的性质。

具体来说:你是在寻找一个确切的问题的答案,或正在寻找学习科特林?

我有这个数组:[“猫”,“狗”,“狮子”,“老虎”,“狗”,“兔子”]

但是,你特别需要一个Array ? 在kotlin中,这种情况通常会被编码为一个List ,所以

  val wordList = listOf("cat", "dog", "lion", "tiger", "dog", "rabbit") 

这个列表是“不可变的”,通常在Kotlin中使用List (或当需要MutableList ),除非有其他原因,如与现有代码的兼容性,或者在MutableList的情况下,具体的性能要求。

此外,如果你的问题是更多的“如何解决这个问题使用for循环与索引?”,然后代码是这样的:

 val wordList = listOf("cat", "dog", "lion", "tiger", "dog", "rabbit") fun List<String>.findWord( target:String):Pair<Int,Int>?{ var (first,last) = Pair(-1,-1) for(idx in this.indices){ if(this[idx]==target){ last = idx if(first ==-1) first = idx } } return if(first>-1) Pair(first,last) else null } println("result ${wordList.findWord("dog")!!}") 

根本不是解决具体问题的最佳方式,但可能适用于任何想知道“如何在for循环中访问索引值”的人,而不是解决这个特定的问题。 所以这是一个kotlin编码的例子,而不是这个问题的推荐解决方案。

问题的最后一部分是“当我搜索不在数组中的东西时,如何抛出错误”。

kotlin'idiom'是在失败时返回null,并使用null安全来处理错误。 如果返回null,此代码只会引发异常。 这不是很多的信息,但使用?: throw MyException("Oops") ,而不是!! 如果声明从Execption继承的MyException类,将允许自定义异常。

您可以使用方法lastIndexOf获取值& indexOf的最后一次出现,以获取array.below中第一次出现的值。

  fun main(args: Array<String>) { // Declaring array val arr = arrayOf("cat", "dog", "lion", "tiger", "dog", "rabbit") // for getting the last position of item println(arr.lastIndexOf("dog")) // for getting the first index of item println(arr.indexOf("dog")) }