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

时间:2011-07-22 22:42:07

标签: c# .net string

我对一个应该平庸的问题有点束缚,但似乎我无法实现解决方案。

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

代码可以正常工作,并且在没有点击字符的情况下打印出newAlphabet。但是当我点击另一个按钮时,它会返回newAlphabet,虽然带有之前删除的字符,并删除新点击的字符。

代码如下

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

4 个答案:

答案 0 :(得分:2)

这一行

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

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

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

答案 1 :(得分:1)

更简单的解决方案是:

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#中,你不能在方法中声明变量static。

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

答案 2 :(得分:0)

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

static string newAlphabet = "abcdefghijklmnopqrstuvwxyz";
Button tempBtn = (Button)sender;

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

MessageBox.Show(newAlphabet);

答案 3 :(得分:0)

请注意,字符串在C#中是不可变的。 “newAlphabet”正在被修改后的“字母表”不断取代。它永远不会坚持。