Kotlin цикл по string

Условия и циклы

В языке Kotlin if является выражением, т.е. оно возвращает значение. Это позволяет отказаться от тернарного оператора ( условие ? условие истинно : условие ложно ), потому что обычному if вполне по силам его заменить.

// обычное использование var max = a if (a < b) max = b // с блоком else var max: Int if (a >b) < max = a >else < max = b >// в виде выражения val max = if (a > b) a else b 

«Ветви» выражения if могут быть блоками, т.е. содержать несколько строк кода, при этом последнее выражение является значением блока:

Если вы используете if в качестве выражения (например, возвращая его значение или присваивая его переменной), то использование ветки else является обязательным.

Условное выражение when

when определяет условное выражение с несколькими «ветвями». Оно похоже на оператор switch , присутствующий в C-подобных языках.

when (x) < 1 ->print("x == 1") 2 -> print("x == 2") else -> < // обратите внимание на блок print("x не равен ни 1, ни 2") >> 

when последовательно сравнивает свой аргумент со всеми указанными значениями, пока не выполнится какое-либо из условий ветвей.

Читайте также:  Is python single threaded

when можно использовать и как выражение, и как оператор. При использовании его в виде выражения значение первой ветки, удовлетворяющей условию, становится значением всего выражения. При использовании в виде оператора значения отдельных веток отбрасываются. В точности как if : каждая ветвь может быть блоком и её значением является значение последнего выражения блока.

Значение ветки else вычисляется в том случае, когда ни одно из условий в других ветках не удовлетворено.

Если when используется как выражение, то ветка else является обязательной, за исключением случаев, в которых компилятор может убедиться, что ветки покрывают все возможные значения. Так происходит, например с записями класса enum и с подтипами sealed (изолированных) классов.

enum class Bit < ZERO, ONE >val numericValue = when (getRandomBit()) < Bit.ZERO ->0 Bit.ONE -> 1 // 'else' не требуется, потому что все случаи учтены > 

В операторах when ветка else является обязательной в следующих условиях:

  • when имеет объект типа Boolean , enum , sealed или их nullable-аналоги;
  • ветки when не охватывают все возможные случаи для этого объекта.
enum class Color < RED, GREEN, BLUE >when (getColor()) < Color.RED ->println("red") Color.GREEN -> println("green") Color.BLUE -> println("blue") // 'else' не требуется, потому что все случаи учтены > when (getColor()) < Color.RED ->println("red") // нет веток для GREEN и BLUE else -> println("not red") // 'else' обязателен > 

Если для нескольких значений выполняется одно и то же действие, то условия можно перечислять в одной ветке через запятую.

when (x) < 0, 1 ->print("x == 0 or x == 1") else -> print("otherwise") > 

Помимо констант в ветках можно использовать произвольные выражения.

when (x) < s.toInt() ->print("s encodes x") else -> print("s does not encode x") > 

Также можно проверять вхождение аргумента в интервал in или !in или его наличие в коллекции:

when (x) < in 1..10 ->print("x is in the range") in validNumbers -> print("x is valid") !in 10..20 -> print("x is outside the range") else -> print("none of the above") > 

Помимо этого Kotlin позволяет с помощью is или !is проверить тип аргумента. Обратите внимание, что благодаря умным приведениям вы можете получить доступ к методам и свойствам типа без дополнительной проверки.

fun hasPrefix(x: Any) = when(x) < is String ->x.startsWith("prefix") else -> false > 

when удобно использовать вместо цепочки условий вида if — else if . При отсутствии аргумента условия работают как простые логические выражения, а тело ветки выполняется при его истинности.

when < x.isOdd() ->print("x is odd") y.isEven() -> print("y is even") else -> print("x+y is odd") > 

Можно получать переменную внутри when условия по следующему синтаксису:

fun Request.getBody() = when (val response = executeRequest()) < is Success ->response.body is HttpError -> throw HttpException(response.status) > 

Такая переменная, объявленная внутри условия when может быть видна только внутри тела этого when .

Цикл for

Цикл for обеспечивает перебор всех значений, поставляемых итератором. Он эквивалентен циклу foreach в таких языках, как C#.

for (item in collection) print(item) 

Телом цикла может быть блок кода.

Как отмечено выше, цикл for позволяет проходить по всем элементам объекта, имеющего итератор, например:

  • обладающего внутренней или внешней функцией iterator() , возвращаемый тип которой Iterator<> :
    • обладает внутренней или внешней функцией next()
    • обладает внутренней или внешней функцией hasNext() , возвращающей Boolean .

    Все три указанные функции должны быть объявлены как operator .

    Чтобы перебрать диапазон чисел, используйте выражение диапазона:

    for (i in 1..3) < println(i) >for (i in 6 downTo 0 step 2)

    Цикл for по диапазону или массиву компилируется в основанный на индексе цикл, который не создает объект итератора.

    Если при проходе по массиву или списку необходим порядковый номер элемента, используйте следующий подход:

    Также вы можете использовать библиотечную функцию withIndex .

    for ((index, value) in array.withIndex())

    Цикл while

    Тело циклов while и do-while выполняется до тех пор, пока их условие выполняется. Разница между ними заключается во времени проверки условия:

    • while проверяет условие и, если оно истинно, выполняет тело, а затем возвращается к проверке условия;
    • do-while выполняет тело и только затем проверяет условие. Если оно выполняется, цикл повторяется. Таким образом, тело do-while выполняется по крайней мере один раз независимо от условия.
    while (x > 0) < x-- >do < val y = retrieveData() >while (y != null) // y здесь доступно! 

    Break и continue в циклах

    Kotlin поддерживает привычные операторы break и continue в циклах. См. Операторы перехода.

    © 2015—2023 Open Source Community

    Источник

    How to Iterate over Each Character in the String in Kotlin?

    In this tutorial, you shall learn how to iterate over characters in a given string in Kotlin, using For loop statement or String.forEach() function, with examples.

    Kotlin – Iterate over Each Character in the String

    Method 1 – Using For loop

    To iterate over each character in the String in Kotlin, use String.iterator() method which returns an iterator for characters in this string, and then use For Loop with this iterator.

    In the following example, we take a string in str1 , and iterate over each character in this string using String.iterator() method and For Loop.

    Method 2 – Using String.forEach()

    To iterate over each character in the String in Kotlin, use String.forEach() method.

    In the following example, we take a string in str1 , and iterate over each character in this string using String.forEach() method.

    fun main(args: Array) < val str1 = "ABCD" val result = str1.forEach (< it ->println(it) >) println("Filtered String : " + result) >

    Conclusion

    In this Kotlin Tutorial, we learned how to iterate over the character of give String, using String.forEach() method, with the help of Kotlin example programs.

    • How to Check if String Ends with Specified Character in Kotlin?
    • How to Check if String Ends with Specified String in Kotlin?
    • How to Check if String Starts with Specified Character in Kotlin?
    • How to Check if String Starts with Specified String Value in Kotlin?
    • How to Check if Two Strings are Equal in Kotlin?
    • How to Compare Strings in Kotlin?
    • How to Compare Strings in Kotlin?
    • How to Create an Empty String in Kotlin?
    • How to Filter Characters of String in Kotlin?
    • How to Filter List of Strings based on Length in Kotlin?
    • How to Filter only Non-Empty Strings of Kotlin List?
    • How to Filter only Strings from a Kotlin List?
    • How to Get Character at Specific Index of String in Kotlin?
    • How to Initialize String in Kotlin?
    • How to Remove First N Characters from String in Kotlin?
    • How to Remove Last N Characters from String in Kotlin?
    • How to check if a String contains Specified String in Kotlin?
    • How to create a Set of Strings in Kotlin?
    • How to define a List of Strings in Kotlin?
    • How to define a String Constant in Kotlin?
    • How to get Substring of a String in Kotlin?
    • Kotlin String Concatenation
    • Kotlin String Length
    • Kotlin String Operations
    • Kotlin String.capitalize() – Capitalize First Character
    • Kotlin – Split String to Lines – String.lines() function
    • Kotlin – Split String – Examples
    • Kotlin – String Replace – Examples
    • Kotlin – String to Integer – String.toInt()
    • [Solved] Kotlin Error: Null can not be a value of a non-null type String

    Источник

    Перебирать символы строки в Kotlin

    В этой статье рассматриваются различные способы перебора символов строки в Kotlin.

    1. Использование цикла for на основе индекса

    Стандартный подход к перебору символов строки — цикл for на основе индекса. Идея состоит в том, чтобы перебрать диапазон допустимых индексов с выражением диапазона.

    Вы также можете использовать until , который возвращает диапазон, начинающийся со значения до указанного конечного значения, но исключая его.

    Поскольку строки в Kotlin выставляют indices свойство, вы можете выполнить итерацию следующим образом:

    2. Перебрать элементы

    Цикл for перебирает все, что предоставляет итератор. Итак, вы можете заменить цикл for по индексам циклом по элементам, как показано ниже:

    3. Использование forEach() функция

    Другой эквивалентный подход состоит в вызове foreach() функция на строке с лямбда-выражениями.

    Это все, что касается перебора символов строки в Kotlin.

    Средний рейтинг 5 /5. Подсчет голосов: 46

    Голосов пока нет! Будьте первым, кто оценит этот пост.

    Сожалеем, что этот пост не оказался для вас полезным!

    Расскажите, как мы можем улучшить этот пост?

    Спасибо за чтение.

    Пожалуйста, используйте наш онлайн-компилятор размещать код в комментариях, используя C, C++, Java, Python, JavaScript, C#, PHP и многие другие популярные языки программирования.

    Как мы? Порекомендуйте нас своим друзьям и помогите нам расти. Удачного кодирования 🙂

    Этот веб-сайт использует файлы cookie. Используя этот сайт, вы соглашаетесь с использованием файлов cookie, нашей политикой, условиями авторского права и другими условиями. Читайте наши Политика конфиденциальности. Понятно

    Источник

    Перебрать строку в обратном направлении в Kotlin

    В этой статье рассматриваются различные способы перебора строки в обратном порядке в Kotlin.

    1. Использование цикла

    Вы можете использовать простой цикл for для обработки каждого символа строки в обратном направлении. Этот подход очень эффективен для строк с меньшим количеством символов.

    2. Преобразовать в массив символов

    В этом подходе вы сначала переворачиваете строку. Затем вы конвертируете обратное String в массив символов с помощью String.toCharArray() функция. Наконец, вы повторяете char[] используя цикл foreach, как показано ниже:

    3. Использование CharacterIterator

    Вы также можете использовать CharacterIterator интерфейс, который обеспечивает двунаправленную итерацию для String.

    4. Использование String.Split() функция

    String.split() разбивает указанную строку и возвращает массив строк, созданный путем разбиения этой строки.

    Это все об итерации строки в обратном направлении в Kotlin.

    Средний рейтинг 4.95 /5. Подсчет голосов: 21

    Голосов пока нет! Будьте первым, кто оценит этот пост.

    Сожалеем, что этот пост не оказался для вас полезным!

    Расскажите, как мы можем улучшить этот пост?

    Спасибо за чтение.

    Пожалуйста, используйте наш онлайн-компилятор размещать код в комментариях, используя C, C++, Java, Python, JavaScript, C#, PHP и многие другие популярные языки программирования.

    Как мы? Порекомендуйте нас своим друзьям и помогите нам расти. Удачного кодирования 🙂

    Этот веб-сайт использует файлы cookie. Используя этот сайт, вы соглашаетесь с использованием файлов cookie, нашей политикой, условиями авторского права и другими условиями. Читайте наши Политика конфиденциальности. Понятно

    Источник

Оцените статью