Как извлечь подстроку из строки, пока не встретится второй пробел? - PullRequest
24 голосов
/ 08 апреля 2010

У меня есть такая строка:

"o1 1232.5467 1232.5467 1232.5467 1232.5467 1232.5467 1232.5467"

Как мне извлечь только "o1 1232.5467"?

Количество извлекаемых символов не всегда одинаково. Следовательно, я хочу извлечь только до тех пор, пока не встретится второй пробел.

Ответы [ 13 ]

0 голосов
/ 08 апреля 2010

Я бы порекомендовал для этого регулярное выражение, поскольку оно обрабатывает случаи, которые вы, возможно, не рассматривали.

var input = "o1 1232.5467 1232.5467 1232.5467 1232.5467 1232.5467 1232.5467";
var regex = new Regex(@"^(.*? .*?) ");
var match = regex.Match(input);
if (match.Success)
{
    Console.WriteLine(string.Format("'{0}'", match.Groups[1].Value));
}
0 голосов
/ 08 апреля 2010

Вы можете сначала попытаться найти индекс «o1». Тогда извлеки это. После этого разделите строку, используя символы "1232.5467":

        string test = "o1 1232.5467 1232.5467 1232.5467 1232.5467 1232.5467 1232.5467";
        string header = test.Substring(test.IndexOf("o1 "), "o1 ".Length);
        test = test.Substring("o1 ".Length, test.Length - "o1 ".Length);
        string[] content = test.Split(' ');
0 голосов
/ 08 апреля 2010

Есть более короткие способы сделать это, как говорили другие, но вы также можете проверять каждый символ, пока не встретите второй пробел самостоятельно, а затем вернуть соответствующую подстроку.

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);
}
...