2015-03-03 20 views
6

ignorieren Ich würde gerne wissen, ob es eine Methode ist, die zwei Strings vergleicht und ignoriert die Akzente machen „noção“ gleich „Noção“. es wäre etwas wie string1.methodCompareIgnoreAccent (string2);Vergleichen Strings akzentuierte Zeichen

+2

Haben Sie sich [ 'Collator'] (http://docs.oracle.com/javase/8/docs/api/java/text/Collator.html)? –

+1

Sie können auch einen Blick auf https://stackoverflow.com/questions/1008802/converting-symbols-accent-letters-to-english-alphabet haben. –

+0

Ich habe eine Klasse für die Suche nach arabischen Texten geschrieben, indem ich Diakritika ignoriert (NICHT lösche). vielleicht kannst du die Idee bekommen oder sie irgendwie benutzen. https://gist.github.com/mehdok/e6cd1dfccab0c75ac7a9536c6afac8ff – mehdok

Antwort

17

können Sie Java Collators verwenden, um die Tests zu vergleichen den Akzent zu ignorieren, sehen Sie ein einfaches Beispiel:

import java.text.Collator; 

/** 
* @author Kennedy 
*/ 
public class SimpleTest 
{ 

    public static void main(String[] args) 
    { 
    String a = "nocao"; 
    String b = "noção"; 

    final Collator instance = Collator.getInstance(); 

    // This strategy mean it'll ignore the accents 
    instance.setStrength(Collator.NO_DECOMPOSITION); 

    // Will print 0 because its EQUAL 
    System.out.println(instance.compare(a, b)); 
    } 
} 

Dokumentation: JavaDoc

ich werde nicht in Details erklären, weil ich nur ein wenig von Collators verwendet und Ich bin kein Experte darin, aber Sie können googlen, es gibt einige Artikel darüber.

+0

danke. Haben Sie nicht wissen, über Sorter – alexandre1985

+0

dies nicht funktioniert, wird es nicht drucken 0. Manchmal druckt -1 andermal 1 – alexandre1985

+1

Es funktioniert, den Code bekommen, bevor der weston bearbeitet. –

3

Es gibt keine in Verfahren gebaut, dies zu tun, so dass Sie bauen müssen, um Ihre eigenen:

Ein Teil dieser Lösung aus here ist: dieser ersten Splits alle Zeichen mit Akzent in ihre deAccented Kollegen gefolgt von ihren Diakritika kombinieren. Dann entfernen Sie einfach alle kombinierenden diakritischen Zeichen. Siehe auch https://stackoverflow.com/a/1215117/4095834

Und dann gleich Ihre Methode wird wie folgt aussehen:

import java.text.Normalizer; 
import java.text.Normalizer.Form; 

public boolean equals(Object o) { 
    // Code omitted 
    if (yourField.equals(removeAccents(anotherField))) { 
     return true; 
    } 
} 

public static String removeAccents(String text) { 
    return text == null ? null : Normalizer.normalize(text, Form.NFD) 
      .replaceAll("\\p{InCombiningDiacriticalMarks}+", ""); 
}