簡體   English   中英

string.IndexOf()無法識別修改后的字符

[英]string.IndexOf() not recognizing modified characters

當使用IndexOf查找一個后跟一個大值char的char(例如char 700,即')時, IndexOf無法識別您正在尋找的char。

例如

string find = "abcʼabcabc";   
int index = find.IndexOf("c");

在此代碼中,索引應為2,但它返回6。

有辦法解決這個問題嗎?

Unicode字母700是修飾符撇號 :換句話說,它修改字母c。 同樣地,如果你使用'e'后跟字符769(0x301) ,它就不再是'e'了:e已經被修改成具有強烈重音的e。 即:é。 您會看到該字母實際上是兩個字符:將其復制到記事本並點擊退格(整潔,嗯?)。

您需要進行“序數”比較(逐字節)而不進行任何語言比較。 這將找到'c',並忽略它被下一個字母修改的語言事實。 在我的'e'例子中,字節是(65)(769),所以如果你逐字節地尋找65,你會發現它,而忽略了這樣一個事實:(65)(769)在語言上是與(233)相同:é。 如果您在語言上搜索(233),它將找到“等效”(65)(769):

string find = "abéabcabc";
int index = find.IndexOf("é"); //gives you '2' even though the "find" has two characters and the the "indexof" is one

希望這不會太混亂。 如果你在實際代碼中這樣做,你應該在評論中准確地解釋你正在做什么:在我的'e'例子中,你通常會想要為用戶數據做語義等價,並且對於例如常數有序等價(希望不會這樣)不要這樣不同,以免你的繼任者用斧頭追捕你

結構在語言上與簡單字節不同。 使用Ordinal字符串比較強制進行字節比較。

        string find = "abcʼabcabc";

        int index = find.IndexOf("c", StringComparison.Ordinal);

暫無
暫無

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

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