如何用字符串拆分计算行

时间:2019-01-24 04:51:50

标签: c#

我正在尝试完成几周前应完成的练习任务(未评分),并且我一生无法弄清问题所在。我需要输出 1 2快速 3棕色 4只狐狸 5跳 6岁以上 7个 8懒 9只狗” 我有分割字符串,所以我可以将所有单词都记下来,只是无法获取之前的数字。到目前为止,我有这个

int ctr = 0;
            string sentance = "The quick brown fox jumped over the lazy dog. ";
            string[] split = sentance.Split(new char[] { ' ', '.' });
            foreach (string s in split)
            {
                if (s.Trim() != "")
                    Console.WriteLine("{0} {2}", ctr++, s);
            }
            Console.ReadLine();

我一直得到的只是一个未处理的异常,我找不到原因。

4 个答案:

答案 0 :(得分:3)

在线

Console.WriteLine("{0} {2}", ctr++, s);

{0}指的是后面列表中的第零个元素;就是ctr++{1}(如果使用的话)将指向下一个s。 您曾经使用过的{2}是指下一个(如果有下一个,但是没有);那就是你的问题。

{2}中没有2号变量(分别为0、1、2)。

尝试

Console.WriteLine("{0} {1}", ctr++, s);

,您应该会看到{1}捡起s

您的错误消息可能类似于“索引(从零开始)必须大于或等于零且小于参数列表的大小”

这意味着您在{2}中的索引2是有问题的。它符合第一部分(“大于或等于零”),但不符合第二部分(“小于参数列表的大小”),因为您的参数列表只有2个长(ctr++和{{1 }}),但2(您在{{1}中的索引)不少于2(参数列表的大小)。

您还遇到了s的问题,但这足以使您重回正轨。

答案 1 :(得分:0)

我将字符串数组的每个元素附加到字符串“结果”,然后在for循环后打印整个内容。

我试图以一种简单的方式进行连接,但是您可以使用其他一些功能来使此界面更漂亮,而无论如何手动操作都希望对您有所帮助。

        string sentence = "The quick brown fox jumped over the lazy dog. ";
        string[] split = sentence.Split(new char[] { ' ', '.' });
        string result = "";
        int i = 1;
        foreach (string s in split)
        {
            if (s.Trim() != ""){
                result += (i + " " + s + " ");
                i++;
            }
        }
        Console.WriteLine(result);

答案 2 :(得分:0)

您的代码似乎正常。您只需要使用"{0} {1}"而不是"{0} {2}",因为您需要索引0和1。另一个有趣的选择是使用Linq库。为确保输出为“ 1 ... 2 ... 3 ...”而不是“ 0 .... 1 ... 2 ...”,您需要确保不使用++ctr ctr++。这样可以确保在增量之后之后而不是在之前返回值。

使用System.Linq库,您可以简单地使用以下内容:

string sentance = "The quick brown fox jumped over the lazy dog. ";
string[] split = sentance.Split(new char[] { ' ', '.' });
string result = string.Join(" ", from w in split 
                                    where w.Trim() != ""
                                    select ++ctr + " " + w);

答案 3 :(得分:0)

您的代码应如下所示:

int ctr = 0;
string sentance = "The quick brown fox jumped over the lazy dog. ";
string[] split = sentance.Split(new char[] { ' ', '.' });

foreach (string s in split)
{
    if (!string.IsNullOrWhiteSpace(s))
        Console.WriteLine("{0} {1}", ctr++, s);
}

Console.ReadLine();

此处string.IsNullOrWhiteSpace的更多信息。

String.Split也带有重载。其中之一是RemoveEmptyEntries。如果您需要删除空条目并避免检查Trim()等,则可以使用它。进一步了解here