2015-03-03 22 views
6

Vorrei sapere se esiste un metodo che confronta 2 stringhe e ignora gli accenti rendendo "noção" uguale a "nocao". sarebbe qualcosa come string1.methodCompareIgnoreAccent (stringa2);Confronto stringhe che ignorano i caratteri accentati

+2

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

+1

Puoi anche dare un'occhiata a https://stackoverflow.com/questions/1008802/converting-symbols-accent-letters-to-english-alphabet. –

+0

Ho scritto una classe per la ricerca attraverso i testi arabi ignorando i segni diacritici (NON li rimuoviamo). forse puoi avere l'idea o usarla in qualche modo. https://gist.github.com/mehdok/e6cd1dfccab0c75ac7a9536c6afac8ff – mehdok

risposta

17

È possibile utilizzare raccoglitrici java per confrontare le prove ignorando l'accento, vedere un semplice esempio:

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)); 
    } 
} 

Documentazione: JavaDoc

Non spiegherò nei dettagli perché ho usato solo un po 'di Collators e non sono un esperto in questo, ma puoi google ci sono alcuni articoli a riguardo.

+0

grazie. Non sapeva di Collator – alexandre1985

+0

questo non funziona, non verrà stampato 0. A volte stampa -1 altre volte 1 – alexandre1985

+1

Funziona, ottieni il codice prima che Weston abbia modificato. –

3

Non NO è costruito nel metodo per fare questo, quindi bisogna costruire il proprio:

Una parte di questo è la soluzione viene da here: Questa prima si divide tutti i caratteri accentati nelle loro controparti deAccented seguito dal loro combinando segni diacritici. Quindi rimuovi semplicemente tutti i segni diacritici combinati. vedere anche https://stackoverflow.com/a/1215117/4095834

E poi il tuo uguale metodo sarà simile a questa:

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}+", ""); 
} 
Problemi correlati