C# 如何在c中使用foreach获得正确的文本字符索引#

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字符或字符串的从零开始的索引。

我想使用forach循环获取字符索引

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