簡體   English   中英

字符串比較,.NET和不間斷空格

[英]String Comparison, .NET and non breaking space

我有一個用C#編寫的應用程序,它可以進行很多字符串比較。 從各種來源(包括用戶輸入)提取字符串,然后進行比較。 但是,在將空間“ 32”與不間斷空間“ 160”進行比較時,我遇到了問題。 對於用戶來說,它們看起來相同,因此他們期望匹配。 但是當應用程序進行比較時,沒有匹配項。

最好的方法是什么? 我是否必須去做字符串比較並手動將不間斷空格標准化為空格的代碼的所有部分? .NET是否提供任何幫助呢? (我嘗試了所有比較選項,但似乎無濟於事。)

有人建議我在收到時對字符串進行規范化,然后讓字符串比較方法簡單地比較規范化的字符串。 我不確定這樣做是否簡單,因為首先是什么是規范化字符串。 我也將其標准化嗎? 當然,現在我可以將不間斷空格轉換為間斷空格。 但是還能顯示什么呢? 這些規則中可能有很多嗎? 他們甚至可能會發生沖突。 (在一種情況下,我想使用規則,在另一種情況下,我不想使用。)

為了找到這個簡單的答案,我費了很大的力氣。 下面的代碼使用正則表達式將普通的空格替換為不間斷空格。

string cellText = "String with non breaking spaces.";
cellText = Regex.Replace(cellText, @"\u00A0", " ");

希望這會有所幫助,丹

如果是我,我將在“拉入”字符串時對其進行“規范化”。 可能帶有string.Replace()。 然后,您無需在其他任何地方更改比較。

編輯 :馬克,那是一個艱難的過程。 到底什么是“規范化”字符串取決於您或您的客戶。 我遇到過類似的情況,客戶需要這樣的字符串:

I have 4 apples.
I have four apples.

實際上是平等的。 您可能需要針對不同情況的單獨的規范化器。 無論哪種方式,我仍然會在檢索原始字符串時進行標准化。

它必須是

text.Replace('\u00A0',' ')

是不間斷空格

這將用正常空間替換非中斷空間。

我建議創建自己的字符串比較器,以擴展原始字符串比較器中的一個-在此處進行“規范化”(用常規空間替換不間斷空間)。 除了實例Equals方法之外,還有一個靜態String.Equals需要一個比較器。

不使用正則表達式的情況也一樣,主要是我自己以后需要時使用:

text.Replace('\ ', ' ')

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM