存储数组中字符串的整数值

时间:2014-04-01 19:39:52

标签: c# arrays wpf string integer

this question中,我提到我使用的strings包含单独的integer值,如下所示:"18 37 237"。话虽如此,进一步进入我的程序,我需要单独访问这些integers,以便我可以将它们打印到文件中。我猜测最好的方法是将它们存储在integer array中,其大小取决于intsstring的数量integer array

这是我目前针对这个问题的目标:

-Size ints根据string

array的数量ints而定

- 使用Regex加载"SampleText 12 23 34"(可能使用某种{{1}}方法)

我的问题是,我将如何编码这些目标?在解决了上述目标后,我应该从那里开始。

更新:为了消除疑惑,我想指出我的所有字符串都包含其他非数字字符,其中大多数实际上都是:{{1}}。我很抱歉没有最初清理它。

6 个答案:

答案 0 :(得分:1)

您可以使用此代码:

var ints = str.Split(' ').Select(x => int.Parse(x)).ToArray();

答案 1 :(得分:1)

在使用int.Parse之前,您可能希望过滤序列:

var ints = str
           .Split()
           .Where(x => x.All(char.IsDigit))
           .Select(int.Parse)
           .ToArray();

char.IsDigit通常是一个不错的选择,但它允许所有数字,而不仅仅是拉丁数字(从0到9),如果你想只允许从09的数字更可取的方式是:

var digits = new[] {'0', '1', '2', '3', '4', '5', '6', '7', '8', '9'};

var ints = str
          .Split()
          .Where(x => x.All(digits.Contains))
          .Select(int.Parse)
          .ToArray();

答案 2 :(得分:0)

我这样做的方法是使用String.Splitint.TryParse

string[] strings = myString.Split( new string[]{ " " }, StringSplitOptions.RemoveEmptyEntries );
int[] ints = new int[ strings.Length ];
for( int i = 0; i < ints.Length; ++i )
{
    if( !int.TryParse( strings[i], out ints[i] )
    {
          // error
    }
}

答案 3 :(得分:0)

string s  = "18 37 SomeText 237";
string[] resultOfSplit = s.Split(' ');
List<int> intList = List<int>();
for (var i=0; i<resultOfSplit.Length;i++)
    {
        int temp=0;
        if(Int.TryParse(resultOfSplit[i],out temp))
        {
            intList.Add(temp);
        }            
    }
// Below line to convert the list to an array
int[] intArray = intList.ToArray();

因此,您需要使用.Split().TryParse()

更新了代码以跳过数组

中的非整数值

答案 4 :(得分:0)

如果你真的想要一个数组,你的整数总是以空格分隔:

string[] seperateInts = testString.Split(' ');
int[] intArray = new int[seperateInts.Length];

for (int i = 0; i < seperateInts.Length; i++)
   int.TryParse(seperateInts[i], out intArray[i]);

列表可能是更好的解决方案:

List<int> intList = new List<int>();
foreach (string s in testString.Split(' ');
{
   int parsedInt = 0;

   //Avoid bad ints
   if (int.TryParse(s, out parsedInt))
      intList.Add(parsedInt);
}

答案 5 :(得分:0)

这个正则表达式会做你期望的

var subject = "18 37 237";
var regex = new Regex(@"\d+");
var myInts = regex.Matches(subject)
         .Cast<Match>()
         .Select(x=> int.Parse(x.Value))
         .ToArray();