提问人:VOVDOGG 提问时间:1/31/2023 更新时间:2/2/2023 访问量:146
如何知道字符串中是否有一个或多个西里尔符号并计算它们 (Kotlin)
How to know if there one or more Cyrillic symbol in String and count them (Kotlin)
问:
我正在研究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,它的编码 = 1,但字符串为 UTF8。
我们想处理这种情况,也许任何人都可以提供帮助。我们决定制定下一个逻辑:如果字符串有俄语符号 -> 对它不做任何事情,那就是 UTF8。否则 -> docheckEncoding()
第一个想法:检查它们是否是字符串中的俄语字母。我这样做了:
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=РЎС‡РμС“符号”Р“、”С“也是俄语。我决定做一些计数器,从字符串中计算俄罗斯符号,并将该数字与字符串长度进行比较。 但我不知道该怎么做。
所以也许你对我的情况有任何想法和更好的解决方案?或者可以给我标题问题的答案?
多谢
答:
0赞
hsz
2/2/2023
#1
简单的正则表达式检查怎么样:
Regex("[\\u0400-\\u04FF]").containsMatchIn(inputString)
评论
'Сче'.encode( 'cp1251').decode( 'utf8')
Сче
'Счесть'.encode( 'utf8').decode( 'cp1251')
Счесть
'Филиал'.encode( 'utf8').decode( 'cp1251')
Филиал
'и'.encode( 'utf8').decode( 'cp1251')
Рё
и
Рё
Р
ё
)