2018-12-18 15:25:17 +01:00

66 lines
1.9 KiB
Kotlin

package adrienmalin.pingpoints
import java.util.regex.*
val yNotPrecededByA:Pattern = Pattern.compile("(?<!A)Y")
val hNotPrecededByCS: Pattern = Pattern.compile("(?<![CS])H")
val aInWord: Pattern = Pattern.compile("(?<!\\b)A")
val silentEndLetter = Pattern.compile("[ADST](?=\\b)")
val notALetter = Pattern.compile("\\W")
val doubleLetter = Pattern.compile("(\\w)\\1+(?!\\1)")
fun soundex(string: String): String {
var s = string
.trim()
.toUpperCase()
.replace('Â', 'A')
.replace('Ä', 'A')
.replace('À', 'A')
.replace('E', 'A')
.replace('È', 'A')
.replace('É', 'A')
.replace('Ê', 'A')
.replace('Ë', 'A')
.replace('Œ', 'A')
.replace('I', 'A')
.replace('Î', 'A')
.replace('Ï', 'A')
.replace('O', 'A')
.replace('Ô', 'A')
.replace('Ö', 'A')
.replace('U', 'A')
.replace('Ù', 'A')
.replace('Û', 'A')
.replace('Ü', 'A')
.replace('Ç', 'S')
.replace("GUI", "KI")
.replace("GUE", "KE")
.replace("GA", "KA")
.replace("GO", "KO")
.replace("GU", "K")
.replace("CA", "KA")
.replace("CO", "KO")
.replace("CU", "KU")
.replace("Q", "K")
.replace("CC", "K")
.replace("CK", "K")
.replace("MAC", "MCC")
.replace("ASA", "AZA")
.replace("KN", "NN")
.replace("PF", "FF")
.replace("SCH", "SSS")
.replace("PH", "FF")
.replace("H", "")
s = yNotPrecededByA.matcher(s).replaceAll("")
s = hNotPrecededByCS.matcher(s).replaceAll("")
s = silentEndLetter.matcher(s).replaceAll("")
s = silentEndLetter.matcher(s).replaceAll("")
s = notALetter.matcher(s).replaceAll("")
s = aInWord.matcher(s).replaceAll("")
s = doubleLetter.matcher(s).replaceAll("$1")
return s
}