2014-04-01 43 views
0

this question我提到我正在使用strings,其中包含单独的integer值,如下所示:"18 37 237"。据说,进一步到我的程序中,我需要有个人访问这些integers,以便我可以打印到一个文件。我猜测最好的方法是将它们存储在integer array中,其大小取决于string中有多少个ints从数组中的字符串存储整数值

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

-Size integer array基于ints多少是string

-Load arrayints(可能使用某种Regex法)

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

更新:要清理混乱,我想指出的是,我所有的字符串包含其它非数字字符,其中大部分实际上是这样的:"SampleText 12 23 34"。对不起原来没有清除它。通过使用String.Splitint.TryParse

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

回答

1

您可能需要使用int.Parse之前过滤您的序列:

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

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

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

您可以使用此代码。

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 
    } 
} 
+2

如果有一个无效字符,例如。一封信会抛出异常。 –

+0

@ Selman22:那么你是否说除了整​​数还有其他字符? @FlatEric:作为数组的“ints”? –

+0

@Ericafterdark我说**如果**字符串中有非数字字符,则为int。解析方法将抛出一个FormatException –

0

我会做到这一点的方法是:

+0

我需要一个临时变量吗? – clcto

+0

你的代码看起来很好,我从来没有见过使用Split()之前的重载! – BradleyDotNET

+0

@LordTakkera我想,它应该是一个'new char [] {''}'但是你想删除空的条目,所以你不应该只使用'Split('')' – clcto

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

更新代码跳过阵列

+0

唯一的问题是,我的字符串有其他非数字字符,如下所示:''Hello 23 34 23“'。 –

+0

对于他们,你是否想要0(或任何其他默认数字说-1)被添加,或应该跳过? – Vandesh

+0

他们应该跳过 –

0

非整数值如果你真的想要一个数组,你的整数总是space delimited:

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

列表是probabl雅更好的解决方案:

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); 
} 
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(); 
+0

这是否甚至适用于包含非数字字符的字符串,如下所示:'“Hello 12 23 34”'? –

+0

是的,为什么不尝试呢? –

相关问题