使用IndexOf分隔句子中的单词

本文关键字:单词 句子 IndexOf 分隔 使用 | 更新日期: 2023-09-27 18:00:23

我正试图在C#控制台中编写一个程序,基本上让用户输入一个句子,每个单词用逗号分隔,然后控制台上的输出会单独显示每个单词。以下是我尝试做的一个例子。

请输入一个用逗号分隔的句子:
你好,我的名字叫约翰·

那么输出看起来像这个

Hello, my, name, is, john
my, name, is, john
name, is, john
is, john
john

这是一项家庭作业,但今天取消了课,所以我们从来没有上过这方面的课。

根据我的阅读,你必须使用索引的方法,但到目前为止,它只是打印出索引编号,而不是实际单词。这是我到目前为止所得到的,它很裸露,但我才刚刚开始。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Chapter_16_Sample_1
{
    class Program
    {
        static void Main(string[] args)
        {
            string sentence;

            Console.WriteLine("Please enter four words seperated by a comma");
            sentence = Console.ReadLine();
            int first = sentence.IndexOf(",");
            Console.WriteLine("{0}", first);
            Console.ReadLine();
        }
    }
}

就像我说的,它确实给了我第一个逗号的正确索引号,但如果我能想出如何拉出整个单词,我想我就能想出这个任务。

使用IndexOf分隔句子中的单词

您将获得逗号第一次出现的索引,然后将其显示在控制台中。

您需要String.Substring方法从用户输入中获取子字符串。Substring方法将index作为参数,然后返回从该索引开始直到字符串结束的子字符串,除非您提供count参数。

例如,此代码将在控制台中显示, John

string input = "Hello, John";
int index = input.IndexOf(',');
Console.WriteLine(input.Substring(index));

正如您所看到的,它还包括起始索引处的字符(在这种情况下是逗号,为了避免这种情况,您可以使用input.Substring(index + 1)而不是input.Substring(index)

现在,如果我们返回您的问题,您可以使用while循环,然后获得以第一个逗号开头的子字符串,显示它,并在每次迭代中更新userInput的值。还可以使用一个变量来保存字符串中第一个逗号的index,所以当它变成-1时,你就会知道字符串中不存在逗号,然后你打破循环并显示最后一部分:

string userInput = Console.ReadLine();
int index = userInput.IndexOf(','); // get the index of first comma
while (index != -1) // keep going until there is no comma
{
    // display the current value of userInput
    Console.WriteLine(userInput); 
    // update the value of userInput
    userInput = userInput.Substring(index + 1).Trim(); 
    // update the value of index
    index = userInput.IndexOf(',');
}
Console.WriteLine(userInput); // display the last part

注意:我还使用了String.Trim方法来删除userInput的尾部空格。

你可以这样做:

  • 读这个句子
  • idx变量将保留IndexOf检索到的最后一个逗号的位置。您可以使用IndexOf的重载来指定搜索下一个逗号的起始索引IndexOf在找不到值时会返回-1,这是停止循环的条件
  • 最后一步是使用方法Substring打印从位置idx+1到字符串末尾的子字符串

代码是这样的请试着理解它,如果你只是复制粘贴它,你将不会学到任何东西

Console.WriteLine("Please enter four words separated by a comma");
string sentence = Console.ReadLine();
Console.WriteLine(sentence);
int idx = -1;
while (true)
{
    idx = sentence.IndexOf(',', idx + 1);
    if (idx == -1) break;
    Console.WriteLine(sentence.Substring(idx + 1));
}