[英]Split string into array then loop, in C#
我已经在Google上搜索了很多,但是我的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); 每次都失败,并且出现错误消息“输入字符串不是数字序列”。
有人可以为此指出正确的方向吗?
非常感谢!
在你的情况下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"
}
希望能帮助到你。
如果您只想获取每个句子并对其进行处理,则可以做到这一点:
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
没有包含有效的整数,因此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的字符串值。 例如,在第一个迭代中,它将有“一号句子”,这显然不是重要的,因此转换失败。
i
只包含以下字符串片段number one
: number one
Sentence number two
Sentence number three
和Sentence number three
。 如果您希望它包含表示ht索引的int,请使用:1) for
循环2)在您的foreach
之前定义的int
并在foreach
代码中将其增加(myInt ++)!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.