2010-05-21 15 views

cevap

4

. Temel sorunu açıklamaya çalışalım, ki bu oldukça basit: Bir karakter her zaman tek bir unicode noktasını temsil eder. Karakterlerin karşılaştırılması, kod noktalarını her zaman eşit anlamlarına bakmaksızın karşılaştırır.

Karakterleri eşit anlam açısından karşılaştırmak isterseniz, bir dize oluşturmanız ve orada sağlanan karşılaştırma yöntemlerini kullanmanız gerekir. Bunlar farklı kültürler için destek içerir. Guffa'nın bunu nasıl yapacağına dair cevaba bakınız.

1

C# 'daki karakterleri karşılaştırırken cultureInfo'nın önemli olduğunu sanmıyorum. char zaten bir Unicode karakteridir, bu yüzden iki karakter kolayca winihut CultureInfo ile karşılaştırılabilir.

+1

Sanırım sorunun amacı, belirli bir kültürde aynı anlama sahip farklı unicode karakterleri için eşitliğe sahip olmaktır. Mesela, ben (durumum göz ardı edildiğinde), ben ve ben aynıyız, ama Türkiye'de değiliz. – mafu

+0

Sanırım doğal dil-porcessing kindaa tihng arıyor. –

+0

@mafutrct, @this: Evet, belirli bir kültür içindeki bir char (örneğin, türkiye) ile karşılaştırmak için hangi olasılıkların olduğunu merak ediyorum. Karakterlere ve dize dökülmüş iki karaktere kıyasla, bir fark var gibi görünüyor. – tanascius

2

String.Compare Yöntemini denediniz mi?

karşılaştırma bu mahfaza kuralları ve tek karakterlerin alfabetik sırayla gibi kültür özgü bilgileri elde etmek için mevcut kültür kullanır. Örneğin, bir kültür, belirli karakter kombinasyonlarının tek bir karakter olarak ele alınacağını veya büyük ve küçük harfli karakterlerin belirli bir şekilde karşılaştırılabileceğini veya bir karakterin sıralama sırasının önceden gelen veya izleyen karakterlere bağlı olduğunu belirtebilir. karakterler için hiçbir kültür etkin karşılaştırma yoktur

String.Compare(str1, str2, false, new CultureInfo("en-US")) 
3

, size örneğin String.Compare(string, string, CultureInfo, CompareOptions) yöntemi kullanabilirsiniz böylece dizeleri karakterleri dönüştürmek zorundayız.

Örnek:

karşılaştıran karakterler ve dizeleri arasında bir fark gerçekten yoktur
char a = 'å'; 
char b = 'ä'; 

// outputs -1: 
Console.WriteLine(String.Compare(
    a.ToString(), 
    b.ToString(), 
    CultureInfo.GetCultureInfo("sv-SE"), 
    CompareOptions.IgnoreCase 
)); 

// outputs 1: 
Console.WriteLine(String.Compare(
    a.ToString(), 
    b.ToString(), 
    CultureInfo.GetCultureInfo("en-GB"), 
    CompareOptions.IgnoreCase 
));