Il mio problema è che String.IndexOf restituisce -1
. Mi aspetto che restituisca 0
.Confronto IndexOf e stringhe ordinali
I parametri:
text
= C:\\Users\\User\\Desktop\\Sync\\̼
(nota il carattere Combining Seagull Below)
stringToTrim
= C:\\Users\\User\\Desktop\\Sync\\
Quando controllo per l'indice, utilizzando int index = text.IndexOf(stringToTrim);
, il valore di index
è -1
. Ho trovato che l'uso di un confronto tra stringhe ordinale ha risolto questo problema mio:
int index = text.IndexOf(stringToTrim, StringComparison.Ordinal);
la lettura on-line, un sacco di caratteri Unicode (come U+00B5 e U+03BC) mappa per lo stesso simbolo, quindi sarebbe una buona idea per espandere su questo e normalizzare entrambe le stringhe:
int index = text.Normalize(NormalizationForm.FormKD).IndexOf(stringToTrim.Normalize(NormalizationForm.FormKD), StringComparison.Ordinal);
È questo l'approccio corretto per controllare a quale indice di una stringa contiene tutti i caratteri sequenziali di un'altra stringa? Quindi l'idea è, normalizzi quando vuoi controllare che i simboli siano una corrispondenza, ma non ti normalizzi quando vuoi controllare i caratteri con i loro valori codificati (quindi permetti simboli duplicati)? Inoltre, qualcuno potrebbe spiegare perché int index = text.IndexOf(stringToTrim);
non ha trovato una corrispondenza all'inizio della stringa? In altre parole, cosa sta effettivamente facendo sotto le coperte? Mi sarei aspettato che iniziasse a cercare i caratteri dall'inizio della stringa fino alla fine della stringa.
ho copiato/incollato questo in LINQPad ed ho ottenuto "0" indietro - forse non capisco caratteri che conciliano. – dnord
@dnord Prova questo: '" C: \\ Utenti \\ Utente \\ Desktop \\ Sync \\ ̼ ".IndexOf (" C: \\ Utenti \\ Utente \\ Desktop \\ Sync \\ ");' Assicurati di copiare questo testo interamente/esattamente da qui! – Alexandru
(Grazie ha funzionato.) Quindi sono sicuramente d'accordo con la prima risposta del valutatore qui sotto: o combinando i personaggi cambia il personaggio precedente (combinando) o hai trovato un bug strano che almeno Microsoft ti ha avvisato. – dnord