使用Kotlin查找数组中最后一次出现的String

时间:2017-09-10 07:42:35

标签: kotlin

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

  • 如何找到第一个“狗”的位置

  • 如何找到最后“狗”的位置

  • 当我搜索不在数组中的内容时,如何抛出错误

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

3 个答案:

答案 0 :(得分:8)

对于在数组中找到第一个最后次出现的问题,在Kotlin中根本不需要使用for循环,您只需使用{ {3}}和indexOf

至于抛出错误,如果lastIndexOf返回-1,您可以抛出Exception,观察:

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

答案 1 :(得分:1)

@ shash678给出了一个最有用的答案,但更多可能会有用,具体取决于你问题的性质。

具体来说:您是否正在寻找所述问题的答案,或者想要学习kotlin?

  

我有这个阵列:[&#34; cat&#34;,&#34; dog&#34;,&#34; lion&#34;,&#34; tiger&#34;,&#34; dog& #34;,&#34;兔子&#34;]

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

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

该列表是不可变的&#39;并且通常{K}将使用List(或在需要时MutableList),除非存在其他原因,例如与现有代码的兼容性或MutableList的特定性能要求。

此外,如果您的问题更多&#34;如何使用带索引的for循环解决此问题?&#34;,那么代码如下:

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")!!}")

根本不是解决特定问题的最佳方法,但可能对任何想知道&#34;如何在for循环中访问索引值的人有用,而不是解决这个特定问题。所以这是kotlin编码的一个例子,而不是这个问题的推荐解决方案。

问题的最后一部分是&#34;当我搜索不在数组中的内容时,我如何抛出错误?&#34;。

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

答案 2 :(得分:0)

您可以使用方法 lastIndexOf 来获取最后一次出现的值&amp;从b获取第一次出现值的 indexOf 是代码。

 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"))
 }