Intereting Posts
Как создать обработчик Generic Response для ошибки и проверки ответа с помощью модифицированных, rxjava и кинжалов Почему мое приложение работает только тогда, когда я назначаю строку переменной прямо в коде при использовании функции OpenFileInput / Ouput Разделить строку по фиксированному числу символов Броски Исключение в методе с Котлином MissingMethodInvocationException тестирование открытого класса в Котлине Функции расширения LocalDateTime и интеллектуальное литье Котлин выполняет необязательное действие Kotlin coroutines и Spring Framework 5 реактивные типы Kotlin – запуск интеграционного теста, ошибка `fun main уже определена` getChildFragmentManager () не найден в kotlin Именованная инъекция не работает побитовое и не работает с байтами в котлин Kotlin KFunction reflection – получить значения параметров Ошибка «Невозможно объединить dex» при использовании Room + Kotlin Конфигурация сети Android

Сравнить String Kotlin

Я изучаю котлин, но я очень разочарован, я не могу сравнить две струны.

Каков правильный способ сравнения.

btn_login.setOnClickListener { val login = input_email.text.trim() val pass = input_password.text.trim() if( login.equals( pass ) ){ startActivity<MainActivity>() } if (login?.equals(other = pass)){ startActivity<MainActivity>() } if (login == pass){ startActivity<MainActivity>() } } 

введите описание изображения здесь

Solutions Collecting From Web of "Сравнить String Kotlin"

Согласно документации для использования структурного равенства == . Он переводится в a?.equals(b) ?: (b === null) .

В вашем случае конвертируйте логин и перейдите из SpannableStringBuilder в String.

  val login = input_email.text.trim().toString() 

Скрытый и SpannableStringBuilder для string с toString , это должно работать.

 val login = input_email.text.trim().toString() val pass = input_password.text.trim().toString() if (login == pass){ startActivity<MainActivity>() } 

1. == :

if ( string1 == string2 ){...}

2. equals :

Указывает, является ли какой-либо другой объект «равным» этому. Реализации должны отвечать следующим требованиям: рефлексивные: для любого ненулевого опорного значения х, x.equals (х) должна возвращать верно.

Симметричный: для любых непустых опорных значений x и y x.equals (y) должен возвращать true тогда и только тогда, когда y.equals (x) возвращает true.

Transitive: для любых ненулевых опорных значений x, y и z, если x.equals (y) возвращает true, а y.equals (z) возвращает true, тогда x.equals (z) должно возвращать true

Согласовано: для любых непустых опорных значений x и y несколько вызовов x.equals (y) последовательно возвращают true или последовательно возвращают false, если информация, используемая при равных сравнениях с объектами, не изменяется.

 /** * Returns `true` if this string is equal to [other], optionally ignoring character case. * * @param ignoreCase `true` to ignore character case when comparing strings. By default `false`. */ public fun String?.equals(other: String?, ignoreCase: Boolean = false): Boolean 

3. compareTo :

public override fun compareTo(other: String): Int

Сравнивает этот объект с указанным объектом для заказа. Возвращает ноль, если этот объект равен указанному другому объекту, отрицательное число, если оно меньше другого, или положительное число, если оно больше другого.

 public fun String.compareTo(other: String, ignoreCase: Boolean = false): Int 

Сравнивает две строки лексикографически, опционально игнорируя разности случаев

Вот пример для сопоставления двух строк с использованием kotlin.

Если вы используете == (double equals) для сопоставления строки, то он сравнивает адрес и возвращает максимальное время неправильного результата в соответствии с java-документацией, поэтому используйте равные для одного и того же

Если вы хотите использовать равный случай игнорирования, то передайте значение true в методе equals для String

 if (s1.equals(s2,true)) 

другой мудрый вы можете просто использовать это без логического типа

 if (s1.equals(s2,false)) or if (s1.equals(s2)) 

код завершения ниже

  fun main(args: Array<String>) { val s1 = "abc" val s2 = "Abc" if (s1.equals(s2,true)) { println("Equal") } else { println("Not Equal") } } 

С проверкой чеков

 String a=..... String b=..... if(a==b){ } 

IgnoreCase

 if(a.equals(b,false)) 

Попробуйте следующее решение, посмотрите, помогает ли оно:

 val passStr: String = textView.text.toString() if( loginStr.compareTo(passStr, false) ){ startActivity<MainActivity>() }