Intereting Posts
Синтетический синтез Kotlin в адаптере или ViewHolder Как сделать закрытые классы родовыми в котлин? Ошибка Android Studio XML «Соответствующий обработчик методов не найден» on onClick Как реализовать модульный модуль для каждого типа номера в Котлине? Ключевое слово Котлина Объекты компаньона Котлина и отражение Как вернуть результат в doInBackground после завершения процесса завершения работы в API UserLoginTask Как создать экземпляр анонимного интерфейса в Котлине? Как обновить элемент в ArrayList без знания индекса в Android с базой данных Firebase Realtime? NoClassDefFoundError okhttp3.internal.io.FileSystem Как имитировать или достигать отношения IS-A для классов данных Kotlin перегрузка + и + = операторов для «классов номеров» Причина приоритета операторов с типом в правой части Ошибка «Невозможно объединить dex» при использовании Room + Kotlin Gradle 3.0.0-alpha1 не совместим с плагином kotlin-android 1.1.2-3?

Сравнить 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>() }