33 Stimmen

Wie extrahiere ich eine Teilzeichenkette aus einer Zeichenfolge, bis das zweite Leerzeichen auftritt?

Ich habe einen String wie diesen:

"o1 1232.5467 1232.5467 1232.5467 1232.5467 1232.5467 1232.5467"

Wie extrahiere ich nur "o1 1232.5467" ?

Die Anzahl der zu extrahierenden Zeichen ist nicht immer gleich. Daher möchte ich nur so lange extrahieren, bis das zweite Leerzeichen auftaucht.

2 Stimmen

Wird zwischen den Wörtern immer nur ein Leerzeichen stehen? Wenn nicht, sind die meisten der folgenden Lösungen ungültig.

3voto

den123 Punkte 773

Etwa so:

int i = str.IndexOf(' ');
i = str.IndexOf(' ', i + 1);
return str.Substring(i);

0 Stimmen

Das war eine ganz einfache, effiziente und clevere Lösung :)

2voto

Asad Punkte 20514
string testString = "o1 1232.5467 1232.5467.........";

string secondItem = testString.Split(new char[]{' '}, 3)[1];

1voto

Henk Holterman Punkte 249753
 string[] parts = myString.Split(" ");
 string whatIWant = parts[0] + " "+ parts[1];

0 Stimmen

@Jeff: Welche sind das im Einzelnen?

0 Stimmen

Verwendung der Pascal-Großschreibung für Variablen; MyString y WhatIWant .

0 Stimmen

Vielleicht ist MyString eine Eigenschaft. Wie auch immer, ich wende diese Regeln nicht auf Schnipsel wie diesen an.

1voto

Francisco Noriega Punkte 12455

:P

Nur eine Anmerkung: Ich denke, dass die meisten Algorithmen hier nicht prüfen, ob Sie 2 oder mehr Leerzeichen zusammen haben, so dass es ein Leerzeichen als zweites Wort bekommen könnte.

Ich weiß nicht, ob es der beste Weg ist, aber ich hatte ein wenig Spaß beim Verknüpfen :P (das Gute daran ist, dass man die Anzahl der Leerzeichen/Wörter wählen kann, die man nehmen möchte)

        var text = "a sdasdf ad  a";
        int numSpaces = 2;
        var result = text.TakeWhile(c =>
            {
                if (c==' ')
                    numSpaces--;

                if (numSpaces <= 0)
                    return false;

                return true;
            });
        text = new string(result.ToArray());

Ich habe auch @ho's Antwort genommen und sie in einen Zyklus verwandelt, damit du sie wieder für so viele Wörter wie du willst verwenden kannst :P

        string str = "My Test String hello world";
        int numberOfSpaces = 3;
        int index = str.IndexOf(' ');     

        while (--numberOfSpaces>0)
        {
            index = str.IndexOf(' ', index + 1);
        }

        string result = str.Substring(0, index);

0voto

IVlad Punkte 42204

Es gibt kürzere Wege, wie andere gesagt haben, aber Sie können auch jedes Zeichen überprüfen, bis Sie selbst auf ein zweites Leerzeichen stoßen, und dann die entsprechende Teilzeichenkette zurückgeben.

static string Extract(string str)
{
    bool end = false;
    int length = 0 ;
    foreach (char c in str)
    {
        if (c == ' ' && end == false)
        {
            end = true;
        }
        else if (c == ' ' && end == true)
        {
            break;
        }

        length++;
    }

    return str.Substring(0, length);
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X