Отделение целочисленных значений от строки

1

Предположим, что у меня есть строки, как показано ниже:

  1. _4_5
  2. _15_16

Теперь я хочу, чтобы они разделили и получили значения в переменных типа

  1. i=4, j=5
  2. i=15, j=16

Как это можно сделать?

Теги:

2 ответа

3
Лучший ответ

Разделите строку символами подчеркивания и вытащите части:

string s = "_4_5";
string[] parts = s.Split(new [] {'_'},StringSplitOptions.RemoveEmptyEntries);
i = int.Parse(parts[0]);
j = int.Parse(parts[1]);

Некоторые вещи, которые нужно добавить:

  • обработка ошибок
  • (я получил две части назад?)
  • проверка числа с помощью TryParse (действительно ли номера действительно номера?)
  • 0
    Благодарю. Это отлично сработало.
1

В дополнение к ответу D Stanley, если у вас будет неизвестное количество переменных (другими словами, не только i или j), вы можете использовать этот метод:

class Program
{
    static void Main(string[] args)
    {
        string s = "_8_12";

        Console.WriteLine("Original ==> \"{0}\"", s);
        Dictionary<string, int> numbers = ParseNumbers(s);
        PrintNumbers(numbers);
        s = "_1_19_7";
        Console.WriteLine("Original ==> \"{0}\"", s);
        numbers = ParseNumbers(s);
        PrintNumbers(numbers);
    }

    private static Dictionary<string, int> ParseNumbers(string s)
    {
        var variables = new Dictionary<string, int>();
        char startVar = 'i'; // Start at 'i' Variable

        string[] nums = s.Split('_');

        foreach (string num in nums)
        {
            if (string.IsNullOrWhiteSpace(num))
                continue;
            variables.Add(startVar.ToString(CultureInfo.InvariantCulture), int.Parse(num));
            startVar++;
        }
        return variables;
    }

    private static void PrintNumbers(Dictionary<string, int> numbers)
    {
        foreach (var q in numbers)
        {
            Console.WriteLine("{0} ==> {1}", q.Key, q.Value);
        }

        Console.WriteLine();
    }
}

Это позволит вам иметь не более двух номеров на строку ввода. Таким образом, вы можете передавать строки типа _8_12 или _8_12_13_19_25 или даже просто _8.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню