2012-01-05 93 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,因此你的转换失败了。

相关问题