Jeśli mam ciąg zawierający kombinację znaków diakrytycznych, wydaje się, że istnieje pewne nieporozumienie między zachowaniem się różnych funkcji ciągu znaków. Jeśli użyję String.IndexOf()
, połączy on znak diakrytyczny i znajdzie właściwy znak. Jeśli użyję String.Split()
, z jakiegoś powodu nie połączy się ich i nie znajdzie połączonego znaku.Różne zachowanie przy łączeniu znaków diakrytycznych między String.Split() i String.IndexOf()
Przykład Kod:
string test = "abce\u0308fgh";
Console.WriteLine(test.IndexOf("e"));
Console.WriteLine(test.IndexOf("ë"));
będzie działać prawidłowo, co oznacza, e nie występuje, ale E jest. Ale z jakiegoś powodu tego nie zachowuje się podobnie:
string test = "abcde\u0308fgh";
Console.WriteLine(test.Split('e').Length.ToString());
Console.WriteLine(test.Split('ë').Length.ToString());
Z jakiegoś powodu Split()
nie będzie łączyć diakrytykę i zostanie podzielony przez e, ale nie za pomocą poczty.
Czy istnieje jakiś powód tej funkcji i czy istnieje sposób, aby uzyskać funkcję IndexOf()
, która nie łączy funkcji diakrytycznej, a najlepiej z funkcją Split()
?
Edit: Zauważyłem, że wcześniej napisany błędny kod, miał „e”, a nie „e”
string test = "abce\u0308fgh";
Console.WriteLine(test.IndexOf('e'));
Console.WriteLine(test.IndexOf('ë'));
ten zachowuje się jak Split()
również, więc nie ma między tymi metodami, to między przyjmowanie postaci lub napisu.
Dodaj 'test = test.Normalize();' –
@HansPassant Nie zawsze można normalizować dane, znaki diakrytyczne (lub inne informacje) mogą być pożądane, aby być oddzielone. W przeciwnym razie 'Normalize()' będzie drogą do zrobienia. Również nie jestem pewien, czy istnieje połączony znak dla każdego znaku diakrytycznego. –
Musisz wymyślić lepszy przykład. Poważnie wątpię, że ją znajdziesz. –