2015-03-03 14 views
6

2 dizeyi karşılaştıran ve "noção" değerini "nocao" ya eşit kılan bir yoksayma yöntemi olup olmadığını öğrenmek istiyorum. string1.methodCompareIgnoreAccent (string2) gibi bir şey olurdu; here bu bir kısmı çözümüdürVurgulu karakterleri yok sayan dizeleri karşılaştırın

edilir: Eğer kendi senin inşa etmek zorunda

+2

['Collator'] 'a (http://docs.oracle.com/javase/8/docs/api/java/text/Collator.html) baktınız mı? –

+1

Ayrıca, https://stackoverflow.com/questions/1008802/converting-symbols-accent-letters-to-english-alphabet adresine de bakabilirsiniz. –

+0

Arapça metinleri incelemek için bir not yazdım. belki fikri alabilir ya da bir şekilde kullanabilirsiniz. https://gist.github.com/mehdok/e6cd1dfccab0c75ac7a9536c6afac8ff – mehdok

cevap

17

Basit bir örnek görmek, aksanını gözardı testleri karşılaştırmak için java collators kullanabilirsiniz:

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

Belgeler: JavaDoc

Sadece biraz açıklayıcılar kullandığım için ayrıntıları açıklamam ve Ben bir uzman değilim, ama google ile ilgili bazı makaleler var.

+0

Teşekkürler. Collator – alexandre1985

+0

hakkında bilmiyordum bu işe yaramıyor, 0 yazdırmayacaktır. Bazen -1 kez basıyor 1 – alexandre1985

+1

Çalışıyor, kodun düzeltilebilmesi için kodu düzeltin. –

3

Bunu yapmak için yönteminde Orada yerleşik hiçbir edilir bu ilk bölünme onların deAccented karşıtları içine tüm aksanlı karakterler tarafından takip onların Aksanların birleştirilmesi. Sonra tüm birleştiren aksanları çıkarırsınız. Ayrıca https://stackoverflow.com/a/1215117/4095834

bkz Sonra senin yöntem aşağıdaki gibi görünecektir eşittir:

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}+", ""); 
} 
İlgili konular