如何从字符串中删除一个字符

本文关键字:一个 字符 删除 字符串 | 更新日期: 2023-09-27 18:07:54

你好,我之前问过这个问题,但我没有具体道歉。我正在制作一个简单的windForms象棋游戏,使用图片框作为每个单元格。根据游戏规则,如果cell被敌人攻击,King将无法移动。为了实现这个规则,我使用了pictureBox。标记属性并为其分配字符串。如果一个棋子瞄准它,我用pictureBox1.Tag += "D" D作为危险。所以如果有两部分以它为目标Tag就变成了"DD"。我的问题是这样的-我如何从我的字符串中删除一个'D' ?我可以使用-=操作符或类似的东西吗?

如何从字符串中删除一个字符

假设:

string a = "ABCDEFG";

删除第一个'D':

a = a.Remove(a.IndexOf('D'), 1);

删除所有"D"

a = new string(a.Where(c => c != 'D').ToArray());

尽管我建议考虑面向对象的方法。然后,您可以轻松地存储对目标位置的实际棋子的引用,因此易于修改(无需重新计算)。

虽然有很多方法可以做你想做的事情,但你真正想做的是放弃字符串操作,并使用其他方法。例如,为这个正方形元信息创建一个完整的类。比如

public class SquareInfo
{
    public int Danger; //the number of pieces that can move to this square.
    //... Any other information about the square you want.
}

然后你可以抓取标签为:

var myInfo = (SquareInfo)myBox.Tag;
if (myInfo.Danger > 2)
{
//do something
}

等等

我想这会解决你的问题。

public void Remove (PictureBox pb){
     if (pb.Tag.ToString().Length > 1) {
         // Greater than 1 because we need to keep one D in case of DD, 
         String temp = pb.Tag.ToString();
         pb.Tag = temp.Substring(0, temp.Length - 2);
     }
     else 
        pb.Tag = "D";
        // Tag equals D because if there is only one D, it won't be deleted  
}

您可以使用regex来指定只删除一个字符的实例:

Regex regex = new Regex(Regex.Escape("D"));
string output = regex.Replace("ABCDDEFG", string.Empty, 1);

使用Replace方法,将字符(作为字符串)替换为空字符串:

string s = "Daddy comes back";
s = s.Replace("D", string.Empty);   // Replace ALL D'
Console.WriteLine(s);

或者,如果您已经知道要删除的字符的索引,或者如果您需要删除单个字符,请考虑使用Substring方法。

s = s.Substring(i, i+1); // Remove the character at position i

注意c# string是不可变的:在这两种情况下,都会返回一个新的字符串实例。