比较字符串Kotlin
我正在学习kotlin,但是我很失望,我无法比较两个字符串。
什么是正确的比较方式。
btn_login.setOnClickListener { val login = input_email.text.trim() val pass = input_password.text.trim() if( login.equals( pass ) ){ startActivity() } if (login?.equals(other = pass)){ startActivity() } if (login == pass){ startActivity() } }
根据结构平等使用==
文档 。 它被翻译成a?.equals(b) ?: (b === null)
。
在你的情况下,转换登录并从SpannableStringBuilder传递给字符串。
val login = input_email.text.trim().toString()
将两个SpannableStringBuilder
都SpannableStringBuilder
到toString
string
,这应该工作。
val login = input_email.text.trim().toString() val pass = input_password.text.trim().toString() if (login == pass){ startActivity() }
以下是使用kotlin匹配两个字符串的示例。
如果你正在使用==(double等于)匹配字符串,那么它是比较地址和返回最大时间错误的结果,因为每个Java文档,所以使用等于相同
如果你想使用平等忽略的情况下,然后在String的equals方法中传递true
if (s1.equals(s2,true))
其他明智的,你可以使用这个没有布尔类似
if (s1.equals(s2,false)) or if (s1.equals(s2))
下面是完整的代码
fun main(args: Array) { val s1 = "abc" val s2 = "Abc" if (s1.equals(s2,true)) { println("Equal") } else { println("Not Equal") } }
1. ==
:
if ( string1 == string2 ){...}
2. equals
:
指示其他某个对象是否“等于”这一个。 实现必须满足以下要求:自反:对于任何非空引用值x,x.equals(x)应该返回true。
对称:对于任何非空引用值x和y,当且仅当y.equals(x)返回true时,x.equals(y)才返回true。
传递:对于任何非空引用值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.比较:
public override fun compareTo(other: String): Int
将此对象与指定的对象进行比较以进行排序。 如果此对象等于指定的其他对象,则返回零;如果小于其他对象,则返回负数;如果大于其他对象,则返回正数。
public fun String.compareTo(other: String, ignoreCase: Boolean = false): Int
按字母顺序比较两个字符串,可以忽略大小写差异
随着案件检查
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() }