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