Un petit article pour faire gagner du temps à ceux qui comme moi voient un paquets de solutions différentes pour ce problÚme typiquement pas anglais.
ProblĂšme
On veut pouvoir rechercher sans distinction de casse et dâaccents.
âCafĂ©â et âcafeâ doivent ĂȘtre considĂ©rĂ©s comme identiques.
Solution
fun String.removeAccentsAndNormalize(): String {
val normalizedText = Normalizer.normalize(this, Normalizer.Form.NFD)
val pattern = "\\p{InCombiningDiacriticalMarks}+".toRegex()
return pattern.replace(normalizedText, "")
}
AprĂšs il devient simple de comparer avec un contains
ou un startsWith
par exemple.
fun searchInTitle(title: String?, query: String): Boolean {
query.removeAccentsAndNormalize()
return title?.contains(query, ignoreCase = true) ?: false
}
Si vous ĂȘtes sur Android
On doit rajouter un petit test et utiliser le Normalizer2
Ă partir de la version 24 dâAndroid.
fun String.removeAccentsAndNormalize(): String {
val normalizedText = if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
Normalizer2.getNFDInstance().normalize(this)
} else {
Normalizer.normalize(this, Normalizer.Form.NFD)
}
val pattern = "\\p{InCombiningDiacriticalMarks}+".toRegex()
return pattern.replace(normalizedText, "")
}
Have a nice day !