2014-04-01 44 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

是的,爲什麼不嘗試呢? –

相關問題