我正在嘗試使用帶有兩個字符(“#”和“&”)的 substringBefore() 樂趣。我如何對兩個 cahr 使用正則運算式?我不想這樣做:
if (myString.contains("&")) {
myString.substringBefore("&")
} else if (myString.contains("#"))
myString.substringBefore("#")
}
uj5u.com熱心網友回復:
如果我理解正確,substringBefore()不接受正則運算式引數。但是,replace()確實如此,我們可以將您的問題表述為從字串的第一個 &或#直到字串的末尾洗掉所有內容。
myString.replace(Regex("[&#].*"), "")
上面的單行呼叫replace將使任何沒有任何&或#的字串保持不變。如果需要,您仍然可以使用if檢查:
if (myString.contains("&") || myString.contains("#")) {
myString.replace(Regex("[&#].*"), "")
}
uj5u.com熱心網友回復:
使用正則運算式:
如果結果既不包含 '&' 也不包含 '#' 并且您希望回傳整個字串:
val result = myString.split('&', '#').first()
如果結果既不包含“&”也不包含“#”并且您希望回傳null:
val result = myString.split('&', '#').let { if (it.size == 1) null else it.first() }
不使用正則運算式:
如果結果既不包含 '&' 也不包含 '#' 并且您希望回傳整個字串:
val result = myString.takeWhile { it != '&' && it != '#' }
如果結果既不包含“&”也不包含“#”并且您希望回傳null:
val result = myString.takeWhile { it != '&' && it != '#' }
.let { if (it == myString) null else it }
uj5u.com熱心網友回復:
最后我找到了一種方法,它實際上很容易:
val matchRegex = "[#&]".toRegex().find(myString)
val manipulatedString = matchRegex?.range?.first?.let {
myString.substring(0, it)
}
如果字串中沒有正則運算式字符,或者這些字符之前的子字串,這將回傳 NULL
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/493038.html
