Adam S
03/12/2023, 9:59 AMval names = listOf(
"commonMain",
"commonTest",
"commonTestFixtures",
)
println(names.joinToString { getPrefix(it) })
// expected: common, common, common
fun getPrefix(name: String) =
when {
name.endsWith("Main") -> name.substringBeforeLast("Main")
name.endsWith("Test") -> name.substringBeforeLast("Test")
name.endsWith("TestFixtures") -> name.substringBeforeLast("TestFixtures")
else -> error("invalid suffix")
}
Youssef Shoaib [MOD]
03/12/2023, 10:05 AMval names = listOf(
"commonMain",
"commonTest",
"commonTestFixtures",
"jvmMain",
"jvmTest",
"jvmTestFixtures",
"jsMain",
"jsTest",
"jsTestFixtures",
)
val suffixes = listOf("Main", "Test", "TestFixtures")
fun getPrefix(name: String) =
suffixes.find(name::endsWith)?.let(name::substringBeforeLast) ?: error("invalid suffix")
fun main() {
println(names.joinToString { getPrefix(it) })
}
Joffrey
03/12/2023, 10:13 AMremoveSuffix
which does exactly what you ask for, but chaining calls for different suffixes only works if you can guarantee that no item will have several suffixes in a row. E.g. commonTestMain
would yield common
, which might not be desirable.nkiesel
03/14/2023, 3:16 AMval names = listOf(
"commonMain",
"commonTest",
"commonTestFixtures",
"jvmMain",
"jvmTest",
"jvmTestFixtures",
"jsMain",
"jsTest",
"jsTestFixtures",
)
val suffixes = listOf("Main", "Test", "TestFixtures").joinToString("|", prefix="(.+)(", postfix=")") { """\Q$it\E""" }.toRegex()
fun getPrefix(name: String) = suffixes.matchEntire(name)?.groupValues?.get(1) ?: error("invalid suffix")
fun main() {
println(names.joinToString { getPrefix(it) })
}
Youssef Shoaib [MOD]
03/14/2023, 1:33 PMnkiesel
03/14/2023, 3:29 PM