在c#中,将字符串拆分为数组然后循环

本文关键字:数组 然后 循环 拆分 字符串 | 更新日期: 2023-09-27 18:19:25

我已经在谷歌上搜索了很多,但是我的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!"
  }
}

每当我运行这个,会话被成功检索,但行说:itemNumber = Convert.ToInt32(I);每次都失败,我得到一个错误说"输入字符串不是一个数字序列。"

谁能给我指一下正确的方向?

多谢!

在c#中,将字符串拆分为数组然后循环

如果您只想获取每个句子并对其进行处理,则可以使用以下命令:

string itemsPlanner = HttpContext.Current.Session["itemsPlanner"].ToString(); 
string[] arrItemsPlanner = itemsPlanner.Split("______"); 
foreach (string i in arrItemsPlanner) 
{ 
  // Do something with each sentence
}

可以拆分字符串和char(或char[])。在foreach中,'i'将是句子的值,因此您可以连接它或处理它或执行任何操作:)

如果我误解了,我道歉。我希望这对你有帮助。

在您的情况下,i不是一个数字,它是数组中的实际元素。foreach循环没有迭代变量,您只能访问通过i进行迭代的实际元素。

所以第一个循环迭代i是第一个句子,然后是第二个句子

如果你想要数字,你必须使用for循环。

所以像这样的

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

希望能有所帮助。

从您的示例中i不包含有效的整数,因此Convert.ToInt32失败。foreach循环用句子数组中的当前条目设置i,所以基本上i总是包含主字符串中的一个句子。如果您希望i作为数组中的索引,则使用for循环。

来自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);
    }

在转换为数字之前需要修剪字符串吗?如果不是,你可以使用Int32.tryParse()

在示例代码中,foreach (string i in arrItemsPlanner) 'i'将逐个获得arrItemsPlanner的字符串值。例如,在第一次迭代时,它将有'Sentence number one',这显然不是一个有效的ont,因此您的转换失败。

i只包含一个字符串片段,即:number one Sentence number twoSentence number three。如果你想让它包含一个表示索引的int,使用:1) for循环2)在foreach之前定义一个int,并在foreach代码中增加它(myint++) !