子串Windows窗体

时间:2015-12-16 16:30:48

标签: c# indexing substring

我的想法是在 TextBoxWord 中输入一个单词,并将另一个单词放入另一个文本框 textBoxLitera 并接收一些 textBoxLitera.text 我的 TextBoxWord.text 中的字词。 该程序给了我一个很好的答案,但抛出异常

索引和长度必须引用字符串中的位置。参数名称长度

namespace Literki
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void btnLitery_Click(object sender, EventArgs e)
        {
            int LetterCount = 0;
            string letter = "";

            string text = TextBoxWord.Text;
            string wyr = textBoxLitera.Text;
            int w = wyr.Length;

            for (int i=0;i<text.Length;i++)
            {
                try
                {
                    letter = text.Substring(i, w);
                }
                catch (ArgumentOutOfRangeException f)
                {
                    MessageBox.Show(f.Message);
                }

                if (letter == textBoxLitera.Text)
                    LetterCount++;
            }
            MessageBox.Show(LetterCount.ToString());
        }
    }
}

我在这里做错了什么? (对不起我的语言,这是我的第一篇帖子) 谢谢你的帮助!

2 个答案:

答案 0 :(得分:0)

如果i位于字符串的末尾,并且您尝试子字符串w字符(其中w > 1),则会失败。

例如,对于单词“four”,最大索引为3("Four"[3]返回“r”)。让我们看看当我们尝试长度&gt;时会发生什么。字符串末尾为0。

"Four".Substring(3, 4) // throws an exception
"Four".Substring(3, 1) // returns "r"

您需要确保:

  1. w不会超过text的长度。这将永远抛出异常。
  2. 代码不得超出text的末尾。一种方法是将for循环的条件更改为i <= text.Length - w

答案 1 :(得分:0)

实际上条件应该是

 for (int i=0;i<text.Length -w+1;i++)