Подтвердить что ты не робот

Как извлечь подстроку из строки до тех пор, пока не появится второе пространство?

У меня есть строка вроде этого:

"o1 1232.5467 1232.5467 1232.5467 1232.5467 1232.5467 1232.5467"

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

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

4b9b3361

Ответ 1

Прямым подходом будет следующее:

string[] tokens = str.Split(' ');
string retVal = tokens[0] + " " + tokens[1];

Ответ 2

Просто используйте String.IndexOf дважды, как в:

     string str = "My Test String";
     int index = str.IndexOf(' ');
     index = str.IndexOf(' ', index + 1);
     string result = str.Substring(0, index);

Ответ 3

Получить позицию первого пространства:

int space1 = theString.IndexOf(' ');

После этого следующее положение:

int space2 = theString.IndexOf(' ', space1 + 1);

Получите часть строки до второго места:

string firstPart = theString.Substring(0, space2);

Вышеприведенный код помещает togehter в однострочный:

string firstPart = theString.Substring(0, theString.IndexOf(' ', theString.IndexOf(' ') + 1));

Ответ 4

s.Substring(0, s.IndexOf(" ", s.IndexOf(" ") + 1))

Ответ 5

Используйте регулярное выражение:.

Match m = Regex.Match(text, @"(.+? .+?) ");
if (m.Success) {
    do_something_with(m.Groups[1].Value);
}

Ответ 6

Что-то вроде этого:

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

Ответ 7

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

Ответ 8

string testString = "o1 1232.5467 1232.5467.........";

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

Ответ 9

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

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

Ответ 10

: P

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

Я не знаю, было ли это наилучшим образом, но мне было немного интересно это сделать: P (хорошо, что он позволяет вам выбирать количество пробелов/слов, которые вы хотите взять)

        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());

Я также получил @ho ответ и сделал его в цикле, чтобы вы могли снова использовать его на столько слов, сколько хотите: 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);

Ответ 11

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

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

Ответ 12

Вы можете сначала попытаться найти indexOf "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(' ');

Ответ 13

Я думал об этой проблеме для своего собственного кода, и хотя я, вероятно, в конечном итоге воспользуюсь чем-то более простым/быстрым, здесь добавлено другое решение Linq, подобное тому, которое добавил @Francisco.

Мне просто нравится, потому что он больше всего напоминает то, что вы на самом деле хотите сделать: "Возьмите символы, а результирующая подстрока имеет менее 2 пробелов".

string input = "o1 1232.5467 1232.5467 1232.5467 1232.5467 1232.5467 1232.5467";
var substring = input.TakeWhile((c0, index) => 
                                input.Substring(0, index + 1).Count(c => c == ' ') < 2);
string result = new String(substring.ToArray());