Bonjour,

Je souhaiterai faire une recherche de chaine de caractère parmis une (grande) liste de chaine de caractère. Une des contraintes est que la recherche ne doit pas être case sensitive ('a' == 'A') et que les signes d'accentuations doivent être ignoré ('a' == 'à').
Pour l'instant j'ai mis en place un système de recherche basé sur les expressions régulières. Voici mon algo :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
 
private String parsePrefix(String prefix) {
  StringBuffer newPrefix = new String();
  int length = prefix.length();
  for(int i = 0; i < length; i++) {
	char c = prefix.charAt(i);
	if (c == 'e' || c == 'é' || c == 'è' || c == 'ê' || c == 'ë') {
		newPrefix.append("[eéèêë]");	
	} else if (c == 'a' || c == 'à' || c == 'â' || c == 'ä') {
		newPrefix.append("[aàâä]");
	} else if (c == 'i' || c == 'ì' || c == 'î' || c == 'ï') {
		newPrefix.append("[iìîï]");
	} else if (c == 'u' || c == 'ù' || c == 'û' || c == 'ü') {
		newPrefix.append("[uùûü]");
	} else if (c == 'o' || c == 'ò' || c == 'ô' || c == 'ö') {
		newPrefix.append("[oòôö]");
	} else if (c == 'c' || c == 'ç') {
		newPrefix.append("[cç]");
	} else {
		newPrefix.append(c);
	}
  }
 
  return newPrefix.toString();
}
 
private void recherche(String mot) {
   //Le mot doit être le début de la phrase
   String nouveau_mot = "^" + parsePrefix(mot);
   Pattern pattern = Pattern.compile(nouveau_mot, Pattern.CASE_INSENSITIVE);
  //data est une liste de String
  //result est la liste où je stocke les résultats
  for(Iterator<String> it = data.iterator(); it.hasNext(); ) {
		String value = it.next();
		if (compareTo(value, pattern)) {
			result.add(value);
		}
  }
  // ....
}
 
private boolean compareTo(String value, Pattern pattern) {
	Matcher matcher = pattern.matcher(value);
	return (matcher.find());
}
Maintenant je voudrais savoir si j'optais pour la solution décrite dans la FAQ (http://java.developpez.com/faq/java/...compare_locale) en utilisant les Collator, est-ce que mon code s'en retrouverai optimisé (et plus propre ) ?
Ou eventuellement si vous avez une autre solution ? ^^

Merci d'avance