我可以使用IndexOf找到一个空格,为什么我也找不到下一个空格呢?

时间:2017-08-06 02:05:24

标签: c# indexof

为什么我的变量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不同的值?

2 个答案:

答案 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中的最后一个字符是空格,您将获得索引超出范围的异常。所以你应该总是检查一下,这可以简单地检查字符串的总长度或数量 - 哦,不要忘记索引从零开始。