Какой самый эффективный способ отделить int от этой строки? - PullRequest
1 голос
/ 11 января 2010

У меня есть строка в этом формате: "ABC_123 _"

Я хочу получить целочисленную переменную, которая является просто числовой частью строки. Какой самый эффективный способ сделать это в C #?

Ответы [ 6 ]

8 голосов
/ 11 января 2010

Это должно быть достаточно эффективно. Не переживайте, если он не самый эффективный, если профилирование не скажет вам, что это узкое место вашего приложения:

string s = "ABC_123_";
int i = Int32.Parse(s.Split('_')[1]);

Без дополнительной информации о вашей проблеме я бы с этим согласился.

3 голосов
/ 12 января 2010

Обязательный пример RegEx для сопоставления всех чисел в строке:

int num = Convert.ToInt32(Regex.Match("ABC_123_", @"\d+").Value);

Изменить, чтобы убедиться, что он окружен _:

int num = Convert.ToInt32(Regex.Match("ABC_123_", @"(?<=_)\d+(?=_)").Value);

Примечание: значение может быть нулевым / пустым, если ваша входная строка имеет неправильный формат, поэтому используйте int.TryParse или try / catch и т. Д.

2 голосов
/ 12 января 2010

Я бы пошел с int i = int.Parse(Regex.Match(string,@"\d+"));

1 голос
/ 12 января 2010

Вот один из способов. Я не знаю, что такое «самый эффективный», но он должен работать:

int? GetJustIntPart(string original)
{
    var split = original.Split('_');
    int test;
    foreach (var item in split)
    {
        if (int.TryParse(item, out test))
            return test;
    }
    return null;
}
0 голосов
/ 12 января 2010

Если длина вашей строки и т. Д. Фиксирована, вы можете использовать String.Substring.

Чем сложнее становится ваша строка, тем больше вы должны использовать Regex.

0 голосов
/ 11 января 2010

Если ваш строковый ввод всегда будет в той же форме, что и ABC_123_, тогда это будет работать

int i = Int32.Parse("ABC_123_".Substring(4, 3));
...