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

时间:2014-06-09 20:29:53

标签: c# string char

美好的一天,我之前问过这个问题,但我没有具体说明道歉。我正在制作一个简单的windForms国际象棋游戏,使用图片框作为每个单元格。根据规则,如果敌人的目标是细胞,那么国王就无法移动。要实现此规则,我使用pictureBox.Tag属性并为其分配一个字符串。如果一件作品瞄准它,我会使用pictureBox1.Tag += "D" D作为危险。因此,如果两件作品定位,则Tag将成为"DD"。我的问题是 - 如何从字符串中删除一个'D'?我可以使用-=运算符或类似的东西吗?

5 个答案:

答案 0 :(得分:1)

假设:

string a = "ABCDEFG";

删除第一个'D':

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

删除所有'D's

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

虽然我建议看一下面向对象的方法。然后你可以很容易地存储对目标点的实际西洋棋棋子的引用,因此很容易修改(无需重新计算)。

答案 1 :(得分:1)

虽然有方法可以做你正在尝试做的事情,但你真正想要做的是抛弃字符串操作,并使用别的东西。例如,为此方形元信息创建一个完整的类。像

这样的东西
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
}

等等。

答案 2 :(得分:0)

只需使用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是不可变的:在这两种情况下,都会返回一个新的字符串实例。

答案 3 :(得分:0)

我认为这可以解决您的问题

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  
}

答案 4 :(得分:0)

您可以使用正则表达式指定只删除一个字符实例:

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