所以现在我有一个像So {a, b, c, d, Justin, Connor, BYE1, BYE2}这样的字符串列表
现在我正尝试在subSequence(0,3)中用"BYE“过滤掉列表中的字符串。但是,如果我只是键入它,我会得到一个错误,因为列表中有一些长度较短的字符串,比如a。如果我添加一个>= 3的长度检查器,那么a,b,c,d不会出现在过滤列表中。我怎样才能使最终过滤的列表是{a,b,c,d,Justin,Connor}?
至于我使用的代码,实际上只有一行:
//currentList = {a, b, c, d, Justin, Connor, BYE1, BYE2}
var filteredList: List<String> = currentList.filter { s -> (s.length >= 3 && s.subSequence(0,3) != "BYE") }发布于 2019-12-20 05:07:41
是像这样吗?
class ExampleUnitTest {
@Test
fun filterList() {
val list = listOf(
"a",
"b",
"c",
"d",
"Justin",
"Connor",
"BYE1",
"BYE2"
)
val filteredList = list.filter { !it.startsWith("BYE") }
assertEquals(filteredList.size, 6)
}
}发布于 2019-12-20 05:20:36
可能与第一次尝试最相似的解决方案是
var filteredList: List = currentList.filter {
s -> (s.length < 3 || s.subSequence(0,3) != "BYE")
}第一次检查(s.length < 3)将允许任何小于3个字符的字符串通过。对于这些较小的字符串,布尔OR (||)将在这里短路,并且subSequence检查永远不会运行。
第二个检查(s.subSequence(0,3) != "BYE")将允许任何不是以"BYE"开头的字符串,只允许至少有三个字符的字符串。
https://stackoverflow.com/questions/59416708
复制相似问题