Verständnisfrage zu Char-Array für LastIndexOfAny

  • VB.NET
  • .NET (FX) 4.5–4.8

Es gibt 8 Antworten in diesem Thema. Der letzte Beitrag () ist von ErfinderDesRades.

    Verständnisfrage zu Char-Array für LastIndexOfAny

    Hi all,

    In der String.LastIndexOfAny-Methode platziert man ein Zeichen, an dem ein String bis dahin gemessen wird. Zum Beispiel .Substring(MyString.LastIndexOfAny(Slash) + 1). Slash muss man als Char-Array deklarieren. Dim Slash As Char() = {"/"c}. Dann müsste doch in der LastIndexOfAny eigentlich Slash(0) stehen? Ist aber falsch dann. Nur Slash.

    Könntet ihr mir sagen, wie das kommt? In der Doku steht nicht viel dazu. Ist intern wohl nur ein Pointer auf das Array?
    Daher musst du ein Array mit einem oder mehrerer Elemente übergeben.
    Warum das ganze Array übergeben? Und nicht ein bestimmtes Zeichen? Daher die Index-Klammer. Das ist meine Frage.

    (Wie gesagt, normalerweise kann mir das egal sein, da eh nur ein Zeichen drin ist). Aber merkwürdig ist das trotzdem.
    An die Neulinge: Nutzt Option Strict On und Option Infer Off. Dadurch kommt ihr mit Datentypumwandlungen nicht durcheinander und der Code verbessert sich um Einiges! Solche Fehler à la Dim Beispiel As Integer = "123" können nicht mehr passieren.
    @Bartosz Probiermal folgendes:

    VB.NET-Quellcode

    1. Dim index1 = "abcdef".LastIndexOf(New Char() {"a"c, "b"c})
    2. Dim index2 = "abcdef".LastIndexOf(New Char() {"c"c, "d"c})
    3. Dim index3 = "abcdef".LastIndexOf(New Char() {"e"c, "f"c})
    und sieh Dir an, was an den Indizes für ein Zeichen steht.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Naja, die Funktion wurde eben so designt, dass du mehr als nur ein Zeichen angeben kannst.
    In einem Satz wie diesen:
    "The quick brown fox jumps over the lazy dog"
    und einem Char Array als Parameter wie diesen: {"o", "y"} findet dir die Funktion das o in dog als letztes valides Zeichen und gibt dir eben diesen Index innerhalb des Textes zurück.

    Die Funktion kümmert es ja nicht wie viele Zeichen da drin stehen, und kann mit nur einem, oder 200 Zeichen benutzt werden.

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „EaranMaleasi“ ()

    Ok danke euch, das hilft mir schonmal weiter. Die Funktion kümmert es also nicht, und wäre der Satz nur "The quick brown fox jumps over the lazy " dann, würde die Position für das y statt der des o zurückgegegen werden..ok.. ^^ Ja so habe ich gar nicht drüber nachgedacht. Ich dachte eher an sowas: Wenn ich dir in der Küche ein Gläserrack gebe (was ich mal als "Array" bezeichne) und da ist nur 1 Glas drin, würdest du mich komisch angucken und sagen "gib mir einfach das eine Glas". Daher meine Verwirrung. Ich habe nie mehr als das eine Zeichen gebraucht...
    An die Neulinge: Nutzt Option Strict On und Option Infer Off. Dadurch kommt ihr mit Datentypumwandlungen nicht durcheinander und der Code verbessert sich um Einiges! Solche Fehler à la Dim Beispiel As Integer = "123" können nicht mehr passieren.
    @ErfinderDesRades ja stimmt auch wieder. :thumbsup: ... Ich hab' auch mittlerweile kapiert, dass any nicht heißt "such alle Slashes und gib die Position des letzten zurück", sondern "gib die letzte Position einer dieser Zeichen zurück". (Ersteres kann any auch bedeuten. Any ist so'n Wort für alles). Bis Earan schrieb, dass man mehrere Zeichen angeben kann, war mir das überhaupt nicht bewusst. Bis heute morgen hab ich gedacht "Warum für 1 Zeichen ein Array aufmachen". Aber dies ist wie gesagt nicht so dramatisch. Ich danke allen Beteiligten! Erledigt.
    An die Neulinge: Nutzt Option Strict On und Option Infer Off. Dadurch kommt ihr mit Datentypumwandlungen nicht durcheinander und der Code verbessert sich um Einiges! Solche Fehler à la Dim Beispiel As Integer = "123" können nicht mehr passieren.

    Bartosz schrieb:

    kapiert, dass any nicht heißt "such alle Slashes und gib die Position des letzten zurück"
    Programmierer-Tip: ich benutze oft ein Inet-Übersetzungs-Tool - auch und insbesondere für Framework-Methoden.
    "Any" heisst auf deutsch (erster Treffer bei dict.cc): "Irgendein".
    Also

    ObjectBrowser schrieb:

    Public Function IndexOfAny(anyOf As Char()) As Integer
    Member of System.String
    bedeutet: "Index von irgendeinem der im Char-Array aufgelisteten Zeichen."
    Dassis selbsterklärendes Code-Design :thumbup: (allerdings auf englisch), und kann man eiglich nicht falsch verstehen.

    Dieser Beitrag wurde bereits 6 mal editiert, zuletzt von „ErfinderDesRades“ ()