Exemple

public static void main( String[] args ) {
String str = "ABC\ud800\udc00"; //\ud800\udc00 = U+10000 //$NON-NLS-1$
int index = str.indexOf( 0x10000 );
if ( index == -1 ) {
System.out.println("String ne prend pas en charge les caractères supplémentaires."); //$NON-NLS-1$
} else {
System.out.println("Index = " + index); //$NON-NLS-1$
}
}

public static void TestIndexOf() {
String str = "A\u0300";
int index = str.indexOf(A);
if (index == -1 ) {
System.out.println("OK!");
}else {
System.out.println("Le caractère 'A' ne doit pas être considéré comme correspondant à A\\u0300");
}
}
public static void TestIndexOf() {
String str = "Voix ambiguë d'un coeur qui au zéphyr préfère les jattes de kiwis. "
int index = str.indexOf("VOIX");
if (index == -1 ) {
System.out.println("IndexOf ne prend pas en charge les correspondances tenant compte de l'environnement local.");
}else {
System.out.println("OK!");
}
}
Solution
Utilisez ICU 2.6.1 com.ibm.icu.text.StringSearch ; voir StringSearch Java Doc

public static void main( String[] args ) {
RuleBasedCollator coll = (RuleBasedCollator)Collator.getInstance(Locale.US);
coll.setStrength(Collator.PRIMARY);
com.ibm.icu.text.StringSearch search = new com.ibm.icu.text.StringSearch("FOX", new StringCharacterIterator("Voix ambiguë d'un coeur qui au zéphyr préfère les jattes de kiwis."), coll); //$NON-NLS-1$ //$NON-NLS-2$
int index = search.first();
System.out.println("Index = " + index); //$NON-NLS-1$
}