2016-08-02 5 views
2

Вот моя строка с 3 целыми числами, и я хочу сохранить ее в 3 целочисленных переменных, но я не могу найти ответ.Преобразование строки в целочисленный массив

string orders = "Total orders are 2222 open orders are 1233 closed are 222"; 

Это то, что я хочу.

int total = 2222; 
int close = 222; 
int open = 1233; 
+1

фиксируется ли строка, то она всегда будет "Всего заказов ### открытые заказы ### ...."? –

ответ

5

Попробуйте использовать регулярные выражения (для извлечения моделей) и Linq (организовать их в int[]):

string orders = "Total orders are 2222 open orders are 1233 closed are 222"; 

    int[] result = Regex 
    .Matches(orders, "[0-9]+") 
    .OfType<Match>() 
    .Select(match => int.Parse(match.Value)) 
    .ToArray(); 
0

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

string orders = "Total orders are 2222 open orders are 1233 closed are 222"; 

List<int> nums = new List<int>(); 
StringBuilder sb = new StringBuilder(); 

foreach (Char c in orders) 
{ 
    if (Char.IsDigit(c)) 
    { 
     //append to the stringbuilder if we find a numeric char 
     sb.Append(c); 
    } 
    else 
    { 
     if (sb.Length > 0) 
     { 
      nums.Add(Convert.ToInt32(sb.ToString())); 
      sb = new StringBuilder(); 
     } 
    } 
} 

if (sb.Length > 0) 
{ 
    nums.Add(Convert.ToInt32(sb.ToString())); 
} 

//nums now contains a list of the integers in the string 
foreach (int num in nums) 
{ 
    Debug.WriteLine(num); 
} 

Выход:

2222 
1233 
222 
1

Вот один из способов

namespace StringToIntConsoleApp 
{ 
    class Program 
    { 
     static void Main(string[] args) 
     { 
      string orders = "Total orders are 2222 open orders are 1233 closed are 222"; 
      string[] arr = orders.Split(' '); 
      List<int> integerList = new List<int>(); 
      foreach(string aString in arr.AsEnumerable()) 
      { 
       int correctedValue ; 
       if(int.TryParse(aString,out correctedValue)) 
       { 
        integerList.Add(correctedValue); 
       } 
      } 

      foreach (int aValue in integerList) 
      { 
       Console.WriteLine(aValue); 
      } 
      Console.Read(); 
     } 
    } 
} 
4

Вы можете сделать это только с помощью Linq:

int[] result = orders 
    .Split(' ') 
    .Where(s => s 
    .ToCharArray() 
    .All(c => Char.IsDigit(c))) 
    .Select(s => Int32.Parse(s)) 
    .ToArray(); 
+0

Предлагаю добавить 'Select' и' ToArray', так как для значения * требуется целочисленный массив * –

+0

Thx. Я отредактировал ответ –

+0

Будьте осторожны с 'Char.IsDigit', например. 'Char.IsDigit ('6');' возвращает 'true'; и 'int.Parse (« 6 »)' will * throw exception *; более точный тест: 'c> = '0' && c <= '9'' –

0

Я хотел бы сделать это так:

var intArr = 
    orders.Split(new[] { ' ' }, StringSplitOptions.None) 
      .Select(q => 
        { 
         int res; 
         if (!Int32.TryParse(q, out res)) 
          return (int?)null; 
         return res; 
        }).Where(q => q.HasValue).ToArray(); 
-1
int[] results = orders.Split(' ').Where(s => s.ToCharArray().All(c => Char.IsDigit(c))) 
    .Select(s => Int32.Parse(s)).ToArray(); 
0

Это извлечет целые числа из строки:

var numbers = 
    Regex.Split(orders, @"\D+") 
     .Where(x => x != string.Empty) 
     .Select(int.Parse).ToArray(); 

Выход

numbers[0] == 2222 
numbers[1] == 1233 
numbers[2] == 222 
Смежные вопросы