2

我在尝试替换与rich text box. 这是我使用的代码

    public static void ReplaceAll(RichTextBox myRtb, string word, string replacer)
    {
        int index = 0;

        while (index < myRtb.Text.LastIndexOf(word))
        {
            int location = myRtb.Find(word, index, RichTextBoxFinds.None);
            myRtb.Select(location, word.Length);
            myRtb.SelectedText = replacer;
            index++;
        }
        MessageBox.Show(index.ToString());
    }

    private void btnReplaceAll_Click(object sender, EventArgs e)
    {
        Form1 text = (Form1)Application.OpenForms["Form1"];
        ReplaceAll(text.Current, txtFind2.Text, txtReplace.Text);
    }

这很好用,但是当我尝试用它自己和另一个字母替换一个字母时,我注意到了一个小故障。

例如,我想e用.Welcome to Nigeriaea

这就是我得到Weaalcomeaaaaaaa to Nigeaaaaaaaaaaaaaaria的。

23当只有三个时,消息框会显示e。请问我做错了什么,我该如何纠正

4

1 回答 1

7

只需这样做:

yourRichTextBox.Text = yourRichTextBox.Text.Replace("e","ea");

如果你想报告匹配的数量(被替换),你可以尝试Regex这样使用:

MessageBox.Show(Regex.Matches(yourRichTextBox.Text, "e").Count.ToString());

更新

当然,使用上述方法在内存方面的成本很高,您可以结合使用一些循环Regex来实现某种高级替换引擎,如下所示:

public void ReplaceAll(RichTextBox myRtb, string word, string replacement){
   int i = 0;
   int n = 0;
   int a = replacement.Length - word.Length;
   foreach(Match m in Regex.Matches(myRtb.Text, word)){          
      myRtb.Select(m.Index + i, word.Length);
      i += a;
      myRtb.SelectedText = replacement;
      n++;
   }
   MessageBox.Show("Replaced " + n + " matches!");
}
于 2013-09-19T21:27:56.970 回答