如何从字符串中删除一个字符
本文关键字:一个 字符 删除 字符串 | 更新日期: 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
是不可变的:在这两种情况下,都会返回一个新的字符串实例。