2010-05-21 23 views

回答

4

的確有比較字符和字符串之間的差。讓我試着解釋一下基本問題,這很簡單:一個角色總是代表一個unicode點。比較字符總是比較代碼點而不考慮它們的相同含義。

如果您想比較相同含義的字符,則需要創建一個字符串並使用其中提供的比較方法。這些包括對不同文化的支持。請參閱Guffa關於如何做到這一點的答案。

1

我不認爲文化信息在比較C#中的字符時很重要。 char已經是一個Unicode字符,所以兩個字符可以輕鬆地比較witohut CultureInfo。

+1

我認爲這個問題的目標是在某種文化中具有相同含義的不同Unicode字符的平等。例如,(當忽略案件時)我和我在英國是一樣的,但在土耳其卻沒有。 – mafu 2010-05-21 09:26:48

+0

我認爲他正在尋找自然語言處理方法。 – 2010-05-21 09:51:29

+0

@mafutrct,@ this:是的,我很好奇有哪些可能性用來比較特定文化中的字符(例如火雞)。似乎有一個區別,當我比較字符和兩個字符轉換爲字符串。 – tanascius 2010-05-21 11:13:46

2

你試過String.Compare方法嗎?

該比較使用當前的文化來獲得文化特定的信息,例如外殼規則和單個字符的字母順序。例如,文化可以指定某些字符組合被視爲單個字符,或者以特定方式比較大寫和小寫字符,或者字符的排序順序取決於前後的字符。

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

沒有爲角色沒文化啓用比較,你必須將字符轉換爲字符串,這樣就可以使用例如String.Compare(string, string, CultureInfo, CompareOptions)方法。

實施例:

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