C# 如何在c中使用foreach获得正确的文本字符索引#
我想使用forach循环获取字符索引C# 如何在c中使用foreach获得正确的文本字符索引#,c#,C#,我想使用forach循环获取字符索引 var text = "aaab"; foreach (var item in text) { Console.WriteLine(text.IndexOf(item)); } 输出为:03 但我预期:01 2 3 所以我的其他操作都出了问题。为什么indexOf()方法没有得到正确的索引 String.IndexOf方法 报告此实例中第一次出现的指定Unicode字符或字符串的从零开始的索引。
var text = "aaab";
foreach (var item in text)
{
Console.WriteLine(text.IndexOf(item));
}
输出为:03
但我预期:01 2 3
所以我的其他操作都出了问题。为什么indexOf()方法没有得到正确的索引
String.IndexOf方法
报告此实例中第一次出现的指定Unicode字符或字符串的从零开始的索引。如果在此实例中找不到该字符或字符串,则该方法返回-1
资料来源:
即使有3次出现“a”,第一次出现的“a”将始终为0。
在这种情况下,您的foreach
-循环相当于写入:
var text=“aaab”;
Console.WriteLine(text.IndexOf(“a”));
Console.WriteLine(text.IndexOf(“a”));
Console.WriteLine(text.IndexOf(“a”));
Console.WriteLine(text.IndexOf(“b”));
但是该方法确实有重载,允许您指定一个startIndex
来开始搜索。IndexOf()函数显示项目的第一次出现。在您的情况下,“a”处于0位置3次
要按您的意愿运行,代码需要:
var text = "aaab";
var i=0;
foreach (var item in text)
{
Console.WriteLine(text.IndexOf(item,i));
i++;
}
我认为最好是创建另一个索引变量,因为
IndexOf()
只返回第一次出现的字符的索引
var text=“aaab”;
int指数=0;
foreach(文本中的变量项){
控制台写入线(索引);
索引++;
}
如果您想使用索引,为什么不从foreach
切换到for
循环
var text = "aaab";
for (int index = 0; index < text.Length; ++index) {
char item = text[index];
// from now on, you have both item (as in foreach) and index
//TODO: paste relevant code here
}
然后你可以把
var text = "aaab";
foreach (var index in text.IndexesOf('a'))
{
// 0 1 2 - indexes of 'a' within "aaab"
Console.WriteLine(index);
}
返回与项匹配的第一个元素。这就是为什么输出是三个
0
,因为a
是第一个。在循环中,您通过“a”、“a”、“a”、“b”循环。存在“a”的索引是第一个索引,因此输出为03
。虽然这可能会产生预期的输出,但实际上在text
中找不到字符的索引。请重读原问题。
var text = "aaab";
foreach (var index in text.IndexesOf('a'))
{
// 0 1 2 - indexes of 'a' within "aaab"
Console.WriteLine(index);
}