Satz in Wörter Zerlegen

  • VB.NET

Es gibt 9 Antworten in diesem Thema. Der letzte Beitrag () ist von 00yoshi.

    Satz in Wörter Zerlegen

    Hallo,

    ich möchte in einer Konsolenanwendung gerne einen Satz Zerlegen (z.B.: "Hallo ich heiße Peter Pan", soll so zerlegt werden, dass jedes Wort in einer eigenen Zeile steht).

    Funktioniert dies nur mit der .split Funktion, oder gibt es noch eine andere Möglichkeit? Wenn ich das mit der .split Funktion mache, wäre ich um Hilfe dankbar.

    VB.NET-Quellcode

    1. Dim Eingabe as String=console.readline()
    2. Dim Ausgabe as String
    3. Ausgabe=Eingabe.split(" ")


    Diese Variante funktioniert nicht.. :(

    Danke für Hilfe im Voraus.

    LG Niklas
    Die Split Funktion gibt ein Array zurück

    Das ist aber nur die halbe Miete.
    Es gibt diese String.Split-Funktionen:

    VB.NET-Quellcode

    1. Split(ParamArray Char()) As String()
    2. Split(Char(), StringSplitOptions) As String()
    3. Split(Char(), Integer) As String()
    4. Split(Char(), StringSplitOptions) As String()
    5. Split(String(), StringSplitOptions) As String()
    6. Split(String(), Integer, StringSplitOptions) As String()

    Wie man sieht, gibt's keine Überladung, die nur einen string entgegennimmt, was Eingabe.split(" ") erfordern würde. Wenn man Option Strict auf Off hat, wird der String (der übrigens eine Länge von 1 hat) implizit zu einem Char konvertiert (dabei wird das erste Zeichen verwendet).
    Also: Option Strict On

    PS: Char-Literale schreibt man so: "d"c
    "Luckily luh... luckily it wasn't poi-"
    -- Brady in Wonderland, 23. Februar 2015, 1:56
    Desktop Pinner | ApplicationSettings | OnUtils
    Also ich habe verstanden, dass ich einen String Array benötige. Da ich bis auf eine Aufgabe nie etwas in VBA gemacht habe, bin ich gerade daran meine "Ausgabe" Variable als String Array zu deklarieren. Aber noch weiß ich nicht wie. Bin noch auf der Suche
    @00yoshi: Das widerspricht jeder Logik und dem Sinn des Forums. Wir wollen hier den Leuten beibringen, selbst Lösungen zu finden. Und kopierfertigen Code vorzukauen macht genau das Gegenteil. (kennst Du den Spruch mit dem Hunrigen und dem Fisch?)

    Das zum einen, viel schlimmer ist aber, dass Du eine nicht zu verachtende Menge an Halbwissen in Deinem Code hast.
    Ich geh's mal durch:

    Als aller erstes: Siehe Post #4. String.Split(" ") gibt's nicht... Option Strict Off gibt's auch nicht. (Gibt's schon, aber "darf" man nicht ;) )

    Die Schleife lässt sich wesentlich eleganter mit der For-Each-Schleife lösen:

    VB.NET-Quellcode

    1. For Each i In Elements
    2. DoSomething(i)
    3. Next
    4. 'Anstelle von:
    5. For i = 0 To Elements.Length - 1
    6. DoSomething(Elements(i))
    7. Next


    Auch verknüpft man Strings nicht mit +, sondern mit &. Du verwendest es ja auch bei intxt(int) & ";", nur komischerweise nicht bei outtxt += ... + funktioniert auch, ist aber optisch schwieriger von einer tatsächlichen Addition zu unterscheiden (ich persönlich habe nie verstanden, woher das + für Stringverknüpfungen bei C-ähnlichen Sprachen kommt).
    Und wenn man viele Stringverknüpfungen macht, verwendet man einen StringBuilder. Das ist eine Frage der Performance, denn jedes Mal, wenn Du bei einem string was "veränderst", wird in Wirklichkeit ein komplett neuer String im Arbeitsspeicher angelegt, der die Veränderung vom Originalen enthält. Das drückt auf die Performance. Der StringBuilder hat das Problem nicht.

    Und zu guter letzt: MsgBox().
    Ist eine der Altlasten von VB6. In .Net-Zeiten verwendet man hier MessageBox.Show().
    Hier genaueres: http://www.vb-paradise.de/allgemeines/tipps-tricks-und-tutorials/allgemein/61310-boese-vb6-vb-2003-funktionen-und-ihre-guten-besseren-neuen-vb-net-alternativen/
    "Luckily luh... luckily it wasn't poi-"
    -- Brady in Wonderland, 23. Februar 2015, 1:56
    Desktop Pinner | ApplicationSettings | OnUtils