fun String.normalize(): String {
val original = arrayOf("ę", "š")
val normalized = arrayOf("e", "s")
return this.map { it ->
val index = original.indexOf(it.toString())
if (index >= 0) normalized[index] else it
}.joinToString("")
}
字符串 使用方法如下:
val originalText = "aębšc"
val normalizedText = originalText.normalize()
println(normalizedText)
fun stripAccents(s: String):String{
if (s == null) {
return "";
}
val chars: CharArray = s.toCharArray()
var sb = StringBuilder(s)
var cont: Int = 0
while (chars.size > cont) {
var c: kotlin.Char
c = chars[cont]
var c2:String = c.toString()
//these are my needs, in case you need to convert other accents just Add new entries aqui
c2 = c2.replace("Ã", "A")
c2 = c2.replace("Õ", "O")
c2 = c2.replace("Ç", "C")
c2 = c2.replace("Á", "A")
c2 = c2.replace("Ó", "O")
c2 = c2.replace("Ê", "E")
c2 = c2.replace("É", "E")
c2 = c2.replace("Ú", "U")
c = c2.single()
sb.setCharAt(cont, c)
cont++
}
return sb.toString()
}
字符串 要使用这些有趣的代码,请像这样转换:
var str: String
str = editText.text.toString() //get the text from EditText
str = str.toUpperCase().trim()
str = stripAccents(str) //call the function
5条答案
按热度按时间deyfvvtc1#
Normalizer只做了一半的工作。以下是如何使用它:
字符串
它是这样工作的:
我们调用normalize()。如果我们传递à,该方法返回**a +
**。然后使用正则表达式,我们清理字符串以仅保留有效的US-ASCII字符。 来源:[http://www.rgagnon.com/javadetails/java-0456.html](http://www.rgagnon.com/javadetails/java-0456.html) 请注意,
Normalizer`是一个Java类;这不是纯粹的Kotlin,它只能在JVM上工作。68bkxrlz2#
TL;DR:
1.使用
Normalizer
对Unicode thext进行规范分解。1.删除非空格组合字符(
\p{Mn}
)。字符串
长回答:
使用Normalizer可以将原始文本转换为等效的合成或分解形式。
x1c 0d1x的值。
(more有关标准化的信息,请参见Unicode® Standard Annex #15)
在我们的例子中,我们对NFD规范化形式感兴趣,因为它允许我们从基本字符中分离出所有组合字符。
在分解文本之后,我们必须运行一个正则表达式来删除所有分解后产生的新字符,这些新字符对应于组合字符。
组合字符是相对于相关基本字符定位的特殊字符。Unicode标准区分两种类型的组合字符:空格和非空格。
我们只对非空格组合字符感兴趣。音调符号是这组字符中的主要类别(但不是唯一的类别),用于拉丁语、希腊语和西里尔语及其相关文字。
要删除正则表达式中的非空格字符,我们必须使用
\p{Mn}
。其他答案使用
\p{InCombiningDiacriticalMarks}
,此区块只包含组合的音调符号。它是\p{Mn}
的子集,只包含112 characters。bxpogfeg3#
这是一个扩展函数,您可以使用并进一步扩展:
字符串
使用方法如下:
型
将打印
第一个月
扩展数组
original
和normalized
,并添加所需的元素。yquaqz184#
你只需要使用
Normalizer
类的这个方法:字符串
范例:
型
产出:
型
4bbkushb5#
如果有人正在努力在Kotlin中做到这一点,这段代码就像一个魅力。为了避免不一致,我还使用.toUpperCase和Trim()。然后我转换这个函数:
字符串
要使用这些有趣的代码,请像这样转换:
型