/* * SearchTest.java 1.0 * * Copyright (c) 1999 Emmanuel PUYBARET - eTeks. All Rights Reserved. * */ import java.text.Collator; import java.util.Locale; public class SearchTest { public static void main (String args []) { String search = "TEXT"; // Fabrication d'un tres long texte String text = "Un "; for (int i = 0; i < 1000; i++) text += "tr\u00e8s "; text += "long t\u00e8xte"; long time = System.currentTimeMillis (); // Instantiation d'un collator francais Collator compareOperator = Collator.getInstance (Locale.FRENCH); compareOperator.setStrength (Collator.PRIMARY); // Recherche de la sous-chaine search dans text int searchLength = search.length (); int max = text.length () - searchLength; int index = -1; for (int i = 0; i < max; i++) if (compareOperator.compare (text.substring (i, searchLength++), search) == 0) { index = i; break; } // Affichage du temps ecoule System.out.println ("Trouv\u00e9 avec Collator \u00e0 l'indice " + index + " apr\u00e8s " + (System.currentTimeMillis () - time) + " ms"); time = System.currentTimeMillis (); // Conversion des deux chaines en minuscules sans accents // avec le convertisseur ci-dessous String lowerCaseText = toLowerCase (text); String lowerCaseSearch = toLowerCase (search); // Recherche de la sous-chaine lowerCaseSearch dans lowerCaseText index = lowerCaseText.indexOf (lowerCaseSearch); // Affichage du temps ecoule System.out.println ("Trouv\u00e9 avec toLowerCase () et indexOf \u00e0 l'indice " + index + " apr\u00e8s " + (System.currentTimeMillis () - time) + " ms"); } // Conversion des caracteres d'une chaine en minuscules sans accents static public String toLowerCase (String string) { char [] charsData = new char [string.length ()]; string.getChars (0, charsData.length, charsData, 0); char c; for (int i = 0; i < charsData.length; i++) if ( (c = charsData [i]) >= 'A' && c <= 'Z') charsData [i] = (char)(c - 'A' + 'a'); else switch (c) { case '\u00e0' : case '\u00e2' : case '\u00e4' : charsData [i] = 'a'; break; case '\u00e7' : charsData [i] = 'c'; break; case '\u00e8' : case '\u00e9' : case '\u00ea' : case '\u00eb' : charsData [i] = 'e'; break; case '\u00ee' : case '\u00ef' : charsData [i] = 'i'; break; case '\u00f4' : case '\u00f6' : charsData [i] = 'o'; break; case '\u00f9' : case '\u00fb' : case '\u00fc' : charsData [i] = 'u'; break; } return new String (charsData); } }