Mark
10/11/2019, 10:49 AMval CJK_EXTENSIONS_STR = fun (): String {
var result = "\\p{InCJK_UNIFIED_IDEOGRAPHS_EXTENSION_A}\\p{InCJK_UNIFIED_IDEOGRAPHS_EXTENSION_B}\\p{InCJK_UNIFIED_IDEOGRAPHS_EXTENSION_C}\\p{InCJK_UNIFIED_IDEOGRAPHS_EXTENSION_D}"
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
result += "\\p{InCJK_UNIFIED_IDEOGRAPHS_EXTENSION_E}"
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
result += "\\p{InCJK_UNIFIED_IDEOGRAPHS_EXTENSION_F}"
}
}
return result
}.invoke()
marstran
10/11/2019, 10:53 AMrun
instead of fun {}.invoke()
.Mark
10/11/2019, 10:54 AMval CJK_EXTENSIONS_STR = run {
var result = "\\p{InCJK_UNIFIED_IDEOGRAPHS_EXTENSION_A}\\p{InCJK_UNIFIED_IDEOGRAPHS_EXTENSION_B}\\p{InCJK_UNIFIED_IDEOGRAPHS_EXTENSION_C}\\p{InCJK_UNIFIED_IDEOGRAPHS_EXTENSION_D}"
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
result += "\\p{InCJK_UNIFIED_IDEOGRAPHS_EXTENSION_E}"
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
result += "\\p{InCJK_UNIFIED_IDEOGRAPHS_EXTENSION_F}"
}
}
result
}
marstran
10/11/2019, 10:59 AMvar
, you could do something like this:
result + "\\p{InCJK_UNIFIED_IDEOGRAPHS_EXTENSION_E}".takeIf { Build.VERSION.SDK_INT >= Build.VERSION_CODES.N }.orEmpty() + "\\p{InCJK_UNIFIED_IDEOGRAPHS_EXTENSION_F}".takeIf { Build.VERSION.SDK_INT >= Build.VERSION_CODES.P }.orEmpty()
Up to you if you think that's more readable 😛Mark
10/11/2019, 11:01 AMMark
10/11/2019, 11:03 AMval CJK_EXTENSIONS_STR = run {
StringBuilder("\\p{InCJK_UNIFIED_IDEOGRAPHS_EXTENSION_A}\\p{InCJK_UNIFIED_IDEOGRAPHS_EXTENSION_B}\\p{InCJK_UNIFIED_IDEOGRAPHS_EXTENSION_C}\\p{InCJK_UNIFIED_IDEOGRAPHS_EXTENSION_D}").apply {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
append("\\p{InCJK_UNIFIED_IDEOGRAPHS_EXTENSION_E}")
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
append("\\p{InCJK_UNIFIED_IDEOGRAPHS_EXTENSION_F}")
}
}
}.toString()
}
marstran
10/11/2019, 11:03 AMrun
anymore.Mark
10/11/2019, 11:05 AMval CJK_EXTENSIONS_STR = StringBuilder("\\p{InCJK_UNIFIED_IDEOGRAPHS_EXTENSION_A}\\p{InCJK_UNIFIED_IDEOGRAPHS_EXTENSION_B}\\p{InCJK_UNIFIED_IDEOGRAPHS_EXTENSION_C}\\p{InCJK_UNIFIED_IDEOGRAPHS_EXTENSION_D}").apply {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
append("\\p{InCJK_UNIFIED_IDEOGRAPHS_EXTENSION_E}")
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.P) {
append("\\p{InCJK_UNIFIED_IDEOGRAPHS_EXTENSION_F}")
}
}
}.toString()
marstran
10/11/2019, 11:25 AMStringBuilder
if you use +
as well.Mark
10/11/2019, 11:26 AMvar result
?marstran
10/11/2019, 11:31 AMmarstran
10/11/2019, 11:33 AM+
operations. If there are loops involved, then you should use the StringBuilder
explicitly.Mark
10/11/2019, 1:16 PMval CJK_EXTENSIONS_STR = "\\p{InCJK_UNIFIED_IDEOGRAPHS_EXTENSION_A}\\p{InCJK_UNIFIED_IDEOGRAPHS_EXTENSION_B}\\p{InCJK_UNIFIED_IDEOGRAPHS_EXTENSION_C}\\p{InCJK_UNIFIED_IDEOGRAPHS_EXTENSION_D}"
.appendIf(Build.VERSION.SDK_INT >= Build.VERSION_CODES.N, "\\p{InCJK_UNIFIED_IDEOGRAPHS_EXTENSION_E}")
.appendIf(Build.VERSION.SDK_INT >= Build.VERSION_CODES.P, "\\p{InCJK_UNIFIED_IDEOGRAPHS_EXTENSION_F}")
fun String.appendIf(appendIt: Boolean, text: String) = if (appendIt) {
this + text
} else {
this
}