2012-01-05 128 views
1

我已經使用Google搜索了很多,但我的C#技能非常糟糕,我只是不明白爲什麼這不起作用。將字符串拆分成數組然後循環,在C#

我有一個字符串來自一個會話對象,我沒有任何控制設置。該字符串包含一些由六個下劃線分隔的句子。例如:

Sentence number one______Sentence number two______Sentence number three etc 

我想通過六個下劃線拆分這個字符串,並返回結果數組中的每個項目。

這裏是我的代碼:

string itemsPlanner = HttpContext.Current.Session["itemsPlanner"].ToString(); 

string[] arrItemsPlanner = itemsPlanner.Split(new string[] { "______" }, StringSplitOptions.None); 

foreach (string i in arrItemsPlanner) 
{ 
    newItemsPlanner += "debug1: " + i; //This returns what looks like a number, as I'd expect, starting at zero and iterating by one each loop. 
    int itemNumber; 

    try 
    { 
    itemNumber = Convert.ToInt32(i); 
    string sentence = arrItemsPlanner[itemNumber].ToString(); 
    } 
    catch (FormatException e) 
    { 
    return "Input string is not a sequence of digits."; 
    } 
    catch (OverflowException e) 
    { 
    return "The number cannot fit in an Int32."; 
    } 
    finally 
    { 
    return "Fail!" 
    } 
} 

每當我跑,通話被成功retreived但說行:itemNumber = Convert.ToInt32(我);每次都會失敗,並且出現錯誤提示「輸入字符串不是數字序列」。

任何人都可以用這個指向正確的方向嗎?

非常感謝!

+0

你能提供一些會話字符串的例子嗎?嘗試修剪Convert.ToInt32(i.Trim())。 – 2012-01-05 09:08:04

+0

什麼是你的會話值? – 2012-01-05 09:08:17

+0

'itemsPlanner'的文章樣本值是否像'1 ______ 6 ______ 1'? – 2012-01-05 09:08:20

回答

4

你的情況i不是數字,它是數組中的實際元素。 foreach循環沒有迭代變量,只能訪問通過i迭代的實際元素。

所以第一個循環itareation我是句子第一,然後第二句話

如果你想要的數字,你必須使用for循環。

因此,像這樣

for(int i = 0; i < arrItemsPlanner.length; i++){ 
    //on first iteration here 
    //i is 0 
    //and arrItemsPlanner[i] id "Sentence number one" 
} 

希望它能幫助。

1

從你的例子i不包含有效的整數,因此Convert.ToInt32失敗。 foreach循環設置i與句子數組中的當前項目,所以基本上i總是包含主要字符串中的一個句子。如果您希望i成爲數組中的索引,請使用for循環。

1

來自MSDN的示例。

string words = "This is a list of words______with a bit of punctuation" + 
        "______a tab character."; 

    string [] split = words.Split(new Char [] {'_'}, StringSplitOptions.RemoveEmptyEntries); 

    foreach (string s in split) { 

     if (s.Trim() != "") 
      Console.WriteLine(s); 
    } 
3

如果你只是想獲得每一個句子,並用它做什麼,這將這樣的伎倆:

string itemsPlanner = HttpContext.Current.Session["itemsPlanner"].ToString(); 
string[] arrItemsPlanner = itemsPlanner.Split("______"); 

foreach (string i in arrItemsPlanner) 
{ 
    // Do something with each sentence 
} 

您可以分割在一個字符串以及CHAR(或CHAR []) 。在foreach'我'將是這個句子的價值,所以你可以連接它或處理它或做任何事情:)

如果我誤解了,我的道歉。我希望幫助:)

1

你需要在轉換爲數字之前修整字符串嗎?如果那不是你可能想要使用Int32。tryParse()

0

i只包含其中一個字符串片段,它將是:number oneSentence number twoSentence number three。如果你希望它包含一個int代表HT指標,使用方法: 1)for環 2)intforeach定義,並且在foreach代碼增加它(敏++)!

1

在您的示例代碼foreach (string i in arrItemsPlanner)'i'將逐個獲取arrItemsPlanner的字符串值。 對於第一次迭代的例子,它將會有'句子第一',這顯然不是vlid,因此你的轉換失敗了。

相關問題