为什么我的变量nextSpaceIterator不会更新到nextSpace之后的空间索引?
int firstSpace = 0;
int nextSpace = 0;
int nextSpaceIterator = 0;
nextSpace = someInputString.IndexOf((char)ConsoleKey.Spacebar);
//find next space
Console.WriteLine(someInputString.Substring(firstSpace, nextSpace - firstSpace));
// Print word between spaces
firstSpace = nextSpace;
// Starting point for next step is ending point of previous step
nextSpaceIterator = someInputString.IndexOf((char)ConsoleKey.Spacebar, nextSpace);
// Find the next space following the previous one, then repeat.
最初我使用了for循环但是我已经将代码分解为单个语句以试图找到问题而我不能。 到目前为止,一切都在进行。不应该
nextSpaceIterator = someInputString.IndexOf((char)ConsoleKey.Spacebar, nextSpace);
返回与nextSpace不同的值?
答案 0 :(得分:3)
基于代码中的注释(空格之间的打印字),您希望在空格之间获取字符串
Console.WriteLine(someInputString.Substring(firstSpace, nextSpace - firstSpace));` // Print word between spaces
如果是,请使用String.Split Method
var words = someInputString.Split((char)ConsoleKey.Spacebar);
var firstWord = words[0];
var secondWord = words[1]; // If you sure that there at least two words
// or loop the result
foreach (var word in words)
{
Console.WriteLine(word);
}
答案 1 :(得分:2)
nextSpace = someInputString.IndexOf((char)ConsoleKey.Spacebar); nextSpaceIterator = someInputString.IndexOf((char)ConsoleKey.Spacebar, nextSpace);
nextSpaceIterator
将返回与nextSpace
相同的位置,因为您提供的偏移量始于{strong>相同索引nextSpace
。
例如:
string foo = "The quick brown fox";
// 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 1 8
// [T][h][e][ ][q][u][i][c][k][ ][b][r][o][w][n][ ][f][o][x]
// * * *
// in this example the indexes of spaces are at 3, 9 and 15.
char characterToMatch = (char)ConsoleKey.Spacebar;
int first = foo.IndexOf(characterToMatch); // 3
int invalid = foo.IndexOf(characterToMatch, first); // this will still be 3
int second = foo.IndexOf(characterToMatch, first + 1); // 9
int third = foo.IndexOf(characterToMatch, second + 1); // 15
解决方案。您需要更改偏移量以向前推进:
nextSpaceIterator = someInputString.IndexOf((char)ConsoleKey.Spacebar, nextSpace+1);
陷阱。如果string
中的最后一个字符是空格,您将获得索引超出范围的异常。所以你应该总是检查一下,这可以简单地检查字符串的总长度或数量 - 哦,不要忘记索引从零开始。