compare with soundex
This commit is contained in:
		| @ -53,10 +53,10 @@ class SttDialog : DialogFragment() { | ||||
|                             partialResultsTextView?.text = result | ||||
|                             pattern?.apply{ | ||||
|                                 val matcher = matcher(result) | ||||
|                                 if (matcher.matches()) { | ||||
|                                 if (matcher.find()) { | ||||
|                                     val foundName = matcher.group(1) | ||||
|                                     for (player in players) { | ||||
|                                         if (foundName.equals(player.name, ignoreCase=true)) { | ||||
|                                         if (soundex(foundName) == soundex(player.name)) { | ||||
|                                             dismiss() | ||||
|                                             updateScore(player) | ||||
|                                             updateUI() | ||||
|  | ||||
							
								
								
									
										65
									
								
								app/src/main/java/adrienmalin/pingpoints/soundex.kt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										65
									
								
								app/src/main/java/adrienmalin/pingpoints/soundex.kt
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,65 @@ | ||||
| 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 | ||||
| } | ||||
|  | ||||
		Reference in New Issue
	
	Block a user