我的答案在this question我必須比較兩個字符。我認爲正常的char.CompareTo()方法可以讓我指定一個CultureInfo,但情況並非如此。如何比較字符(尊重文化)
所以我的問題是:如何比較兩個字符並指定一個CultureInfo進行比較?
我的答案在this question我必須比較兩個字符。我認爲正常的char.CompareTo()方法可以讓我指定一個CultureInfo,但情況並非如此。如何比較字符(尊重文化)
所以我的問題是:如何比較兩個字符並指定一個CultureInfo進行比較?
的確有比較字符和字符串之間的差。讓我試着解釋一下基本問題,這很簡單:一個角色總是代表一個unicode點。比較字符總是比較代碼點而不考慮它們的相同含義。
如果您想比較相同含義的字符,則需要創建一個字符串並使用其中提供的比較方法。這些包括對不同文化的支持。請參閱Guffa關於如何做到這一點的答案。
我不認爲文化信息在比較C#中的字符時很重要。 char已經是一個Unicode字符,所以兩個字符可以輕鬆地比較witohut CultureInfo。
你試過String.Compare
方法嗎?
該比較使用當前的文化來獲得文化特定的信息,例如外殼規則和單個字符的字母順序。例如,文化可以指定某些字符組合被視爲單個字符,或者以特定方式比較大寫和小寫字符,或者字符的排序順序取決於前後的字符。
String.Compare(str1, str2, false, new CultureInfo("en-US"))
沒有爲角色沒文化啓用比較,你必須將字符轉換爲字符串,這樣就可以使用例如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
));
我認爲這個問題的目標是在某種文化中具有相同含義的不同Unicode字符的平等。例如,(當忽略案件時)我和我在英國是一樣的,但在土耳其卻沒有。 – mafu 2010-05-21 09:26:48
我認爲他正在尋找自然語言處理方法。 – 2010-05-21 09:51:29
@mafutrct,@ this:是的,我很好奇有哪些可能性用來比較特定文化中的字符(例如火雞)。似乎有一個區別,當我比較字符和兩個字符轉換爲字符串。 – tanascius 2010-05-21 11:13:46