Mein Problem ist, dass String.IndexOf-1
zurückgibt. Ich würde erwarten, dass es 0
zurückgibt.IndexOf und ordinale Zeichenfolgenvergleiche
Die Parameter:
text
= C:\\Users\\User\\Desktop\\Sync\\̼
(beachten Sie die Combining Seagull Below Zeichen)
stringToTrim
= C:\\Users\\User\\Desktop\\Sync\\
Wenn ich für den Index zu überprüfen, mit int index = text.IndexOf(stringToTrim);
, ist der Wert von index
-1
. Ich fand, dass ein Ordnungs String-Vergleich unter Verwendung dieses Problem von mir gelöst:
int index = text.IndexOf(stringToTrim, StringComparison.Ordinal);
Online-Lese, eine Menge von Unicode-Zeichen (wie U+00B5 und U+03BC) Karte mit dem gleichen Symbol, so wäre es eine gute Idee sein, zu erweitern und normalisieren beide Strings:
int index = text.Normalize(NormalizationForm.FormKD).IndexOf(stringToTrim.Normalize(NormalizationForm.FormKD), StringComparison.Ordinal);
Ist dies der richtige Ansatz, um zu überprüfen, bei welchem Index eine Zeichenfolge alle aufeinander folgenden Zeichen einer anderen Zeichenfolge enthält? Die Idee ist also, dass Sie normalisieren, wenn Sie überprüfen wollen, ob Symbole übereinstimmen, aber Sie normalisieren sich nicht, wenn Sie Zeichen anhand ihrer codierten Werte überprüfen möchten (also doppelte Symbole zulassen)? Könnte auch jemand bitte erklären, warum int index = text.IndexOf(stringToTrim);
am Anfang der Zeichenfolge keine Übereinstimmung gefunden hat? Mit anderen Worten, was macht es tatsächlich unter den Deckungen? Ich hätte erwartet, dass es beginnt, Zeichen vom Anfang der Zeichenfolge bis zum Ende der Zeichenfolge zu suchen.
I/diese in LinqPad eingefügt kopiert und bekam „0“ zurück - vielleicht verstehe ich nicht die Kombination von Zeichen. – dnord
@dnord Versuchen Sie Folgendes: '" C: \\ Benutzer \\ Benutzer \\ Desktop \\ Sync \\ ".IndexOf (" C: \\ Benutzer \\ Benutzer \\ Desktop \\ Sync \\ ");' Achte darauf, diesen Text vollständig/genau von hier zu kopieren! – Alexandru
(Danke, das funktioniert hat.) Dann stimme ich der Antwort des Top-Raters zu: entweder kombinierende Charaktere ändern das vorherige Zeichen (durch Kombination) oder Sie haben einen seltsamen Fehler gefunden, vor dem Sie zumindest von Microsoft gewarnt wurden. – dnord