[英]How to use string property correctly in Kotlin?
我有以下代碼將根據 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()
}
}
我在 REPL 中嘗試了以下代碼,它返回了以下幾行或錯誤。
java.lang.StringIndexOutOfBoundsException: String index out of range: 3 at java.lang.String.substring(String.java:1963)
var pass="gl"
var password = pass.substring(0,3)
val len = password.length
println(len)
print(password)
當變量 pass 的長度等於或大於 3 個字符時,它會在 REPL 中正確執行。
我在使用 Kotlin 的 Android Studio 上。
注意:第二塊代碼,按原樣,不是寫入編輯器的內容。 這是我在 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()
}
}
在 Java/Kotlin 中,一個 String 是一個字符序列,每個字符都有一個給定的索引,索引從 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
來自子字符串Kotlin 文檔:
返回此字符串的子字符串,從 startIndex 開始並在 endIndex 之前結束。
fun String.substring(startIndex: Int, endIndex: Int): String
回到你的例子:
"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
並使您的應用程序崩潰。
您可以在調用substring()
之前檢查 editText 的長度。
// 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()
}
}
在您的 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()
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.