Android 如何在Kotlin中正确使用字符串属性?

Android 如何在Kotlin中正确使用字符串属性?,android,android-studio,kotlin,Android,Android Studio,Kotlin,下面的代码将根据EditText中字符串的前五个字符调用函数save()。如果满足条件,我试图保存到数据库的内容是编辑文本中前五个字符之后的任何内容 当编辑文本中的字符串超过五个字符时,下面的代码可以正常工作。如果字符串长度小于5,则应用程序崩溃。为了避免这种情况,我添加了第二块代码来查找字符串的长度,但它不起作用。你能查一下问题出在哪里吗 val pass =findViewById<EditText>(R.id.editText).text.toString()

下面的代码将根据EditText中字符串的前五个字符调用函数save()。如果满足条件,我试图保存到数据库的内容是编辑文本中前五个字符之后的任何内容

当编辑文本中的字符串超过五个字符时,下面的代码可以正常工作。如果字符串长度小于5,则应用程序崩溃。为了避免这种情况,我添加了第二块代码来查找字符串的长度,但它不起作用。你能查一下问题出在哪里吗

 val pass =findViewById<EditText>(R.id.editText).text.toString()
            var password: String = pass.substring(0,5)

            if (password == "hello"){
                save()
                Toast.makeText(this, "Database updated", Toast.LENGTH_LONG).show()
            }
            else
            {
                Toast.makeText(this, "Unauthorized user", Toast.LENGTH_LONG).show()
            }

        }
当变量过程的长度等于或大于3个字符时,它在REPL中执行时不会出错

我在Android Studio上使用Kotlin


NB:第二块代码,按原样,不是写入编辑器的代码。这就是我在REPL中尝试的示例。

首先检查字符串的长度,然后根据长度大小进行操作,如

val length = pass.length
if(length<5){
    println(len);
}else{
   var password: String = pass.substring(0,5)

        if (password == "hello"){
            save()
            Toast.makeText(this, "Database updated", Toast.LENGTH_LONG).show()
        }
        else
        {
            Toast.makeText(this, "Unauthorized user", Toast.LENGTH_LONG).show()
        }
}
val length=pass.length

如果(长度首先检查字符串的长度,然后根据长度的大小进行工作,如

val length = pass.length
if(length<5){
    println(len);
}else{
   var password: String = pass.substring(0,5)

        if (password == "hello"){
            save()
            Toast.makeText(this, "Database updated", Toast.LENGTH_LONG).show()
        }
        else
        {
            Toast.makeText(this, "Unauthorized user", Toast.LENGTH_LONG).show()
        }
}
val length=pass.length
if(length在save()函数中输入下面的代码,检查字符串的长度是否超过5个字符

val pass =findViewById<EditText>(R.id.editText).text.toString()

if (pass.length>5){
     var password: String = pass.substring(0,5)
          if (password == "hello"){
                save()
                Toast.makeText(this, "Database updated", Toast.LENGTH_LONG).show()
            }
            else
            {
                Toast.makeText(this, "Unauthorized user", Toast.LENGTH_LONG).show()
            }
}else{
                Toast.makeText(this, "Length is less than 5 Chars", Toast.LENGTH_LONG).show()

}
val pass=findviewbyd(R.id.editText).text.toString()
如果(通过长度>5){
变量密码:String=pass.substring(0,5)
如果(密码==“您好”){
保存()
Toast.makeText(这是“数据库更新”,Toast.LENGTH\u LONG.show())
}
其他的
{
Toast.makeText(这是“未经授权的用户”,Toast.LENGTH\u LONG.show())
}
}否则{
Toast.makeText(这个“长度小于5个字符”,Toast.Length\u LONG.show()
}
在save()函数中,输入下面的代码,检查字符串长度是否超过5个字符

val pass =findViewById<EditText>(R.id.editText).text.toString()

if (pass.length>5){
     var password: String = pass.substring(0,5)
          if (password == "hello"){
                save()
                Toast.makeText(this, "Database updated", Toast.LENGTH_LONG).show()
            }
            else
            {
                Toast.makeText(this, "Unauthorized user", Toast.LENGTH_LONG).show()
            }
}else{
                Toast.makeText(this, "Length is less than 5 Chars", Toast.LENGTH_LONG).show()

}
val pass=findviewbyd(R.id.editText).text.toString()
如果(通过长度>5){
变量密码:String=pass.substring(0,5)
如果(密码==“您好”){
保存()
Toast.makeText(这是“数据库更新”,Toast.LENGTH\u LONG.show())
}
其他的
{
Toast.makeText(这是“未经授权的用户”,Toast.LENGTH\u LONG.show())
}
}否则{
Toast.makeText(这个“长度小于5个字符”,Toast.Length\u LONG.show()
}

在Java/Kotlin中,字符串是一个字符序列,每个字符都有一个给定的索引,索引从0开始,例如:

"Hello"

length: 5 (5 characters)
startIndex: 0
endIndex: length - 1 = 5 - 1 = 4

Character    Index
    H          0
    e          1
    l          2
    l          3
    o          4
"gl"

length: 2
startIndex: 0
endIndex: length - 1 = 2 - 1 = 1

Character    Index
    g          0
    l          1
来自Kotlin文档:

返回此字符串的子字符串,从startIndex开始,然后 在endIndex之前结束

fun String.substring(startIndex: Int, endIndex: Int): String
回到你的例子:

"Hello"

length: 5 (5 characters)
startIndex: 0
endIndex: length - 1 = 5 - 1 = 4

Character    Index
    H          0
    e          1
    l          2
    l          3
    o          4
"gl"

length: 2
startIndex: 0
endIndex: length - 1 = 2 - 1 = 1

Character    Index
    g          0
    l          1
pass.substring(0,3)
将在startIndex(0)处返回一个子字符串,并在endIndex(endIndex-1=3-1=2)之前结束。但2是无效索引,因此程序会抛出
IndexOutOfBoundsException
并使应用程序崩溃

在调用editText上的
substring()
之前,可以检查它的长度

// Define this variable in scope of class
private val PASSWORD_LENGTH_MIN = 5


val pass = findViewById<EditText>(R.id.editText).text.toString()

if (pass.length < PASSWORD_LENGTH_MIN) {
    Toast.makeText(this, "Password length too short.", Toast.LENGTH_LONG).show()
} else {
    var password: String = pass.substring(0, PASSWORD_LENGTH_MIN)

    if (password == "hello") {
        save()
        Toast.makeText(this, "Database updated", Toast.LENGTH_LONG).show()
    } else {
        Toast.makeText(this, "Unauthorized user", Toast.LENGTH_LONG).show()
    }
}
//在类的作用域中定义此变量
私有val密码长度最小值=5
val pass=findviewbyd(R.id.editText).text.toString()
if(pass.length
在Java/Kotlin中,字符串是一个字符序列,每个字符都有一个给定的索引,索引从0开始,例如:

"Hello"

length: 5 (5 characters)
startIndex: 0
endIndex: length - 1 = 5 - 1 = 4

Character    Index
    H          0
    e          1
    l          2
    l          3
    o          4
"gl"

length: 2
startIndex: 0
endIndex: length - 1 = 2 - 1 = 1

Character    Index
    g          0
    l          1
来自Kotlin文档:

返回此字符串的子字符串,从startIndex开始,然后 在endIndex之前结束

fun String.substring(startIndex: Int, endIndex: Int): String
回到你的例子:

"Hello"

length: 5 (5 characters)
startIndex: 0
endIndex: length - 1 = 5 - 1 = 4

Character    Index
    H          0
    e          1
    l          2
    l          3
    o          4
"gl"

length: 2
startIndex: 0
endIndex: length - 1 = 2 - 1 = 1

Character    Index
    g          0
    l          1
pass.substring(0,3)
将在startIndex(0)处返回一个子字符串,并在endIndex(endIndex-1=3-1=2)之前结束。但2是无效索引,因此程序会抛出
IndexOutOfBoundsException
并使应用程序崩溃

在调用editText上的
substring()
之前,可以检查它的长度

// Define this variable in scope of class
private val PASSWORD_LENGTH_MIN = 5


val pass = findViewById<EditText>(R.id.editText).text.toString()

if (pass.length < PASSWORD_LENGTH_MIN) {
    Toast.makeText(this, "Password length too short.", Toast.LENGTH_LONG).show()
} else {
    var password: String = pass.substring(0, PASSWORD_LENGTH_MIN)

    if (password == "hello") {
        save()
        Toast.makeText(this, "Database updated", Toast.LENGTH_LONG).show()
    } else {
        Toast.makeText(this, "Unauthorized user", Toast.LENGTH_LONG).show()
    }
}
//在类的作用域中定义此变量
私有val密码长度最小值=5
val pass=findviewbyd(R.id.editText).text.toString()
if(pass.length
它的工作原理略有改变。将pass.length()更改为pass.length。它的工作原理略有改变。将pass.length()更改为pass.length。