【问题标题】:C# substrings: Removing first three charactersC# 子字符串:删除前三个字符
【发布时间】:2014-03-21 11:23:01
【问题描述】:

我有一个字符串,我想从中删除前三个字符。我该如何使用子字符串来解决这个问题,或者还有其他方法吗?

string temp = "01_Barnsley"
string textIWant = "Barnsley"

谢谢

【问题讨论】:

  • 我们需要开始将此类问题标记为frist-psot(a la Slashdot),因为要回答它会导致拼写错误。将其混合起来,然后进入编辑狂潮!
  • 您确定要删除前三个字符吗?在我看来,您似乎对删除直到(包括)第一个下划线的所有内容更感兴趣。
  • 这个问题对 SO 来说太深奥了。我的意思是,什么是 Google?
  • 这能回答你的问题吗? How to remove first 10 characters from a string?

标签: c# string substring


【解决方案1】:

您可以使用String.Substring(Int32) method

从此实例中检索子字符串。子字符串 开始于 指定字符位置并继续到字符串的末尾。

string textIWant = temp.Substring(3);

这是一个demonstration

您也可以使用String.Remove method(Int32, Int32) method

返回一个新字符串,其中包含指定数量的字符 从指定位置开始的当前实例已被删除。

string textIWant = temp.Remove(0, 3);

这是一个demonstration

【讨论】:

  • 谢谢!不敢相信事情就这么简单。我知道如何获取部分字符串但不删除开头部分。
  • 我确实使用了谷歌,但找不到这个特定问题的解决方案。
  • @Phil 你到底在 Google 上写了什么?
【解决方案2】:

你可以使用String.Substring Method (Int32)

string textIWant = temp.Substring(3);

String.Remove Method (Int32, Int32)

string textIWant = temp.Remove(0,3);

【讨论】:

  • 感谢您的帮助。
【解决方案3】:

如果数据存在某种模式,则可以使用正则表达式提取所需的数据。

因此,如果知道有数字(\d 正则表达式表示数字,1 或多个带有+)后跟一个下划线;这是要排除的模式。现在我们通过使用( ) 表示法说我们想要一个组匹配来告诉解析器我们想要捕获什么。在该子组中,我们说使用.+ 捕获所有内容。句点 (.) 表示任何字符,而前面看到的 + 表示 1 个或多个。

整个模式的完全匹配(不是我们想要的)在索引零处分组。我们想要索引 1 处的第一个子组匹配,这是我们的数据。

Console.WriteLine (Regex.Match("01_Barnsley",   @"\d+_(.+)").Groups[1].Value); // Barnsley
Console.WriteLine (Regex.Match("9999_Omegaman", @"\d+_(.+)").Groups[1].Value); // Omegaman

请注意,如果它超过两位数,我们如何不必担心?虽然子字符串可能会因为数量增加而失败,但对于正则表达式解析器来说这不是问题由于我们的模式中发现的灵活性

总结

如果数据有明显的模式,并且数据可能会发生变化,请使用正则表达式。最小的学习曲线可以带来丰厚的回报。如果您确实只需要在特定点不变的东西,请使用子字符串。

【讨论】:

    【解决方案4】:

    使用 LINQ 的解决方案:

    string temp = "01_Barnsley";
    string textIWant = new string(temp.Skip(3).ToArray());
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-07-17
      • 1970-01-01
      • 2017-04-30
      • 1970-01-01
      • 2012-08-02
      • 1970-01-01
      • 2015-11-20
      • 2011-10-15
      相关资源
      最近更新 更多