我以為我知道 string.contains() 在 Kotlin 和 Java 中是如何作業的,但顯然我不知道。
我有一小段代碼,其中包含檔案名串列,如果不包含某些單詞,則將它們放在另一個串列中。
for (i in 0..filliste.size-1) {
if (!filliste[i].contains("utenfastbopel") || !filliste.contains("sperret") ||
!filliste.contains("reservert")){
var a = filliste[i]
tempFnrliste = filliste[i].split("_")[0]
}
}
但是,這并不排除包含短語“sperretstrengtreservert”的檔案,即使“reservert”和“sperret”都在“不包含”中。
怎么來的?我以為 .contains 發現了子字串的每一次出現?
但是,如果您查看除錯運行,包含兩個要忽略的短語的檔案確實不會被忽略:

更新:
為了清楚起見,我正在尋找包含一個或多個字串的任何檔案名。所以邏輯 OR/|| 是正確的。
但是,我錯過了一些指標。但是添加它們并沒有改變。請參閱下面的更新代碼:

據我所見,代碼現在清楚地說明了如果字串不包含此、此或此子字串...但是,包含兩個子字串的字串仍然匹配。
奇怪的是,如果我只在“不包含”中使用一個子字串 - 例如“reservert”,代碼確實會跳過所有不包含它的字串。但是當我使用 || 多個子字串的運算子,事情變得一團糟。
uj5u.com熱心網友回復:
"sperretstrengtreservert"不包含utenfastbopel。
您正在使用||aka OR。你的第一個條件是真的。
如果其中任何一個為真,它將進??入條件主體。
!filliste[i].contains("utenfastbopel") ||
!filliste.contains("sperret") ||
!filliste.contains("reservert")
同樣如前所述,您在后續條件下沒有訪問相同的物件,盡管它不會按原樣改變結果。
您需要將其從“至少其中一個條件必須為真”更改為“所有這些條件都必須為真” &&,也就是AND。
for (i in 0..filliste.size-1) {
val f = filliste[i]
if (!f.contains("utenfastbopel") && !f.contains("sperret") && !f.contains("reservert")) {
tempFnrliste = f.split("_")[0]
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/520244.html
標籤:细绳科特林子串包含
