使用Kotlin查找数组中最后一次出现的字符串
我有这个数组: ["cat", "dog", "lion", "tiger", "dog", "rabbit"]
-
我怎样才能找到第一个 “狗”的位置 ?
-
我怎样才能找到最后的 “狗”的位置 ?
-
当我搜索不在数组中的东西时,如何抛出一个错误 ?
目前,我有一个for
循环,但我有打印位置的困难。
对于在数组中找到第一个和最后一个出现的问题,在Kotlin中根本不需要使用for循环,只需使用indexOf和lastIndexOf
至于抛出一个错误,你可以抛出一个异常,如果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")) }