c#中替换字符串值的简单问题

本文关键字:简单 问题 字符串 替换 | 更新日期: 2023-09-27 18:03:19

我遇到了一个问题,这个问题应该是平庸的,但似乎我无法实现解决方案。

我有按钮,每个按钮上有一个字符,确切地说是26(英文字母),当我单击它们中的任何一个时,循环遍历字符串以查找按钮上的文本值,并将其替换为引号。

代码可以工作,并且它打印出没有单击字符的newAlphabet。但是,当我单击另一个按钮时,它返回新walphabet,尽管先前删除的字符,并删除新的单击字符。

代码如下

static string alphabet = "abcdefghijklmnopqrstuvwxyz";
static string newAlphabet = string.Empty;
Button tempBtn = (Button)sender;
for (int i = 0; i < alphabet.Length; i++)
{
  if (alphabet[i].ToString().Contains(tempBtn.Text))
  {
    newAlphabet = alphabet.Replace(tempBtn.Text, ""); 
    MessageBox.Show(newAlphabet);
  }
}

很抱歉语法或拼写错误,英语不是我的母语。

问候,HC

c#中替换字符串值的简单问题

这一行

 newAlphabet = alphabet.Replace(tempBtn.Text, ""); 

意味着你总是回到"abcdefghijklmnopqrstuvwxyz"并替换它。

如果你想继续替换字母,你需要替换newAlphabet

一个更简单的解决方案是:

static string alphabet = "abcdefghijklmnopqrstuvwxyz";
private void button1_Click(object sender, EventArgs e)
{
  var tempBtn = (Button)sender;
  alphabet = alphabet.Replace(tempBtn.Text, "");
  MessageBox.Show(alphabet);
}

注1:
如果您发布的代码是在您的按钮单击事件方法,那么它将不会编译。在c#中,你不能在方法中声明变量是静态的。

注2:
字符串是不可变的,所以alphabet.Replace()返回一个新的字符串,而不影响原来的。

如果目标是从列表中删除被点击的字母:

static string newAlphabet = "abcdefghijklmnopqrstuvwxyz";
Button tempBtn = (Button)sender;
newAlphabet = newAlphabet.Replace(tempBtn.Text, ""); 
MessageBox.Show(newAlphabet);

请注意字符串在c#中是不可变的。"新字母表"不断被修改后的"字母表"所取代。