如何知道字符串中是否有一个或多个西里尔符号并对其进行计数(Kotlin)

aydmsdu9  于 2023-02-05  发布在  Kotlin
关注(0)|答案(1)|浏览(234)

我正在做QR解析器。在我的QR中我有一个字段"encoding",它显示了一个字符串编码("1"= w1251,"2"= UTF8,"3"= KOI8-R)。我需要解码UTF-8中的1,3,所以没问题:

private fun checkEncoding(encoding: String, decodedString: String) =
    when (encoding) {
        "1" -> decodedString.toByteArray(Charset.forName("windows-1251")).toString(Charset.forName("UTF-8"))
        "3" -> decodedString.toByteArray(Charset.forName("KOI8-R")).toString(Charset.forName("UTF-8"))
        "2" -> decodedString
        else -> throw ErrorsBuilder.UNKNOWN_ENCODING_ERROR.unknownEncodingException(decodedString)
    }

但有时我们会得到错误的QR,它的encoding = 1,但字符串为UTF8。我们希望处理这种情况,也许任何人都可以帮助。我们决定制作下一个逻辑:如果字符串包含俄语符号-〉不对其执行任何操作,则为UTF8。否则-〉do checkEncoding()
第一个想法:检查它们是否是字符串中的俄语字母。我这样做:

fun main() {
    val string1 = "Name=Филиал"
    val string2 = "Name=СчеС"
    val string3 = "ФФФ"

    println(parse2(string1)) //false
    println(parse2(string2)) //false
    println(parse2(string3)) //true }

fun parse2(string: String): Boolean {
    return string.matches("[а-яёА-ЯЁ]+".toRegex())
}

你怎么能检查字符串中至少有一个俄语符号和许多英语符号?比如matchesAny()
字符串"ST00011"中的第二个问题|Name = Р С ‡ Р µ С "symbols" Р "," С "也是俄语。我决定做一些计数器,它可以从字符串中计数俄语符号,并将该数字与字符串长度进行比较。但我不知道如何执行它。
所以也许你对我的情况有什么想法和更好的解决方案?或者可以给我标题上的问题的答案?
多谢了

slwdgvem

slwdgvem1#

简单的正则表达式检查怎么样:

Regex("[\\u0400-\\u04FF]").containsMatchIn(inputString)

相关问题