【问题标题】:How to remove one char from a string?如何从字符串中删除一个字符?
【发布时间】:2014-07-30 11:28:57
【问题描述】:

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

【问题讨论】:

  • 看看SubString方法。
  • 您是在这些字符串中保留大量元信息还是只是 D?如果只是 D 则执行 = 而不是 +=。
  • 我只是在学习编程,我在网上搜索并没有找到我需要的东西。如果我要问一个明显的问题,请给我一些答案,或者至少给我一个答案链接。
  • @kenny,这适用于 java,但同样适用。

标签: c# string char


【解决方案1】:

假设:

string a = "ABCDEFG";

要删除第一个“D”:

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

删除所有的 'D's

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

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

【讨论】:

  • 这不会删除所有 D 吗?我会推荐Distinct
  • @gunr2171:你说得对,我更新了我的答案 - 添加了另一种方法。
【解决方案2】:

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

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
}

等等。

【讨论】:

    【解决方案3】:

    我想这会解决你的问题

    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】:

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

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

      【讨论】:

      • 恕我直言,我认为使用正则表达式对于这个特定的任务来说太过分了。
      • 我尊重你们的 cmets 家伙,尽管在防守的情况下:@Neolisk,我想这是一个见仁见智的问题。我认为这与任何正则表达式操作一样简单,正如 OP 所说他正在学习的那样,这是一种引入有用工具的简单方法。 quantdev,我认为这里没有明显的性能问题,特别是考虑到 OP 描述的程序的性质。无论如何,fair cm 两者兼而有之。
      【解决方案5】:

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

      【讨论】:

      • 不会删除字符串中的所有 'D' 吗?
      • 是的。使用 Substring 仅删除给定位置的特定字符,请参阅我的编辑
      猜你喜欢
      • 1970-01-01
      • 2023-03-14
      • 2021-12-11
      • 2011-05-16
      • 2011-11-18
      • 2017-07-19
      • 2021-04-06
      • 1970-01-01
      相关资源
      最近更新 更多