【问题标题】:Remove front characters from a string?从字符串中删除前面的字符?
【发布时间】:2013-10-17 19:24:34
【问题描述】:

从字符串开头删除几个字符的最佳方法是什么?

sName = "IMG: Testing again"  
sName = "TXT: This is amazing"

所以删除 IMG: 和 TXT.. 等...

所以我可以拥有这个?

sName = "Testing again"   
sName = "This is amazing"

【问题讨论】:

  • 你试过什么? How To Ask
  • 您有要删除的前缀列表吗?
  • 你真的应该先用谷歌搜索一下,这种问题已经被问过一百万次了,这里不应该再问了。

标签: c# .net string split c#-2.0


【解决方案1】:

如果它总是四个字符,你可以做到。 sName = sName.Substring(5)

【讨论】:

  • 会删除前三个字符并保留其余字符吗?
  • 前四个字符从零开始,但是是的
  • 这会删除前 3 个字符,而不是前 4 个。
  • 更不用说用户也想删除空间,所以你应该使用sName.Substring(5) 来获得OP示例中的结果。
  • @RyanSchlueter:参数是startIndex - 第一个包含。 OP 是对的 - 这将删除前三个字符,因为您从第四个字符开始。
【解决方案2】:

我个人喜欢使用简单的regular expression 来完成此类任务。

var result = Regex.Replace(input, @"^[A-Z]+:\s*", "");

这与它将删除的其他方法的语义略有不同,因此这里解释了匹配项(另请参阅regular expression quick reference)。

^         # anchor match to start of input
[A-Z]+    # match one or more capital English-alphabet characters
:         # match a colon
\s*       # match zero or more spaces

因此,这种方法还可以匹配“HELLOWORLDILOVEYOU:said Fred”之类的输入,并去掉“TXT:    Wut?”中多余的前导空格。

【讨论】:

  • @zimdanen 除了没有 - I'm not solving nqueens ;)
  • 哎呀,看起来很有趣。
  • @zimdanen 我什至无法理解作者是如何开始如此疯狂的!我同意正则表达式可能会被过度使用,而且我已经看到了一些糟糕的变态。如果 1) 没有更合适的现有解析工具,我通常会感到安全; 2)我可以将正则表达式结构放在一行上; 3) 不用看笔记,第二天就能看懂。
【解决方案3】:

假设您始终使用{TYPE}: {Text} 格式,并且您想要{Text},请使用:

int index = sName.IndexOf(':') + 2; // two:  one for the colon and one for the space
sName = sName.Substring(index);

这当然可以放在一行中;为了清楚起见,我将其分为两部分。

你也可以为一般情况做一个扩展方法:

public static string SubstringAfter(this string str, string sequence)
{
    int index = str.IndexOf(sequence);
    if (index > -1)
    {
        return str.Substring(str.IndexOf(sequence) + sequence.Length);
    }
    return str;
}

这让你可以这样做:

sName = sName.SubstringAfter(": ");

【讨论】:

    【解决方案4】:

    如果它是固定格式,我建议您进行拆分。查看代码。拆分后第一个索引将拥有您的项目。

    var sName = sName.Split( new char[] {':'})[1].Trim();
    

    【讨论】:

      【解决方案5】:
       sName = sName.Remove(0,5); //simple but not perfect way
      

      已编辑:

       sName= sName.Split(':')[1]; //For splitting by ':'
       sName = sName.Remove(0,1); //For the space, or use sName.Trim();
      

      【讨论】:

      • 这只会删除前 3 个字符,在示例中,用户想要删除前 5 个字符(包括空格)。
      【解决方案6】:

      你可以使用

      sName = sName.SubString(4, sname.Length)
      

      它将从第4个位置到字符串的最后一个位置的子字符串。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-08-02
        • 1970-01-01
        • 2017-09-09
        • 2011-05-08
        • 2014-06-30
        • 1970-01-01
        • 1970-01-01
        • 2016-07-26
        相关资源
        最近更新 更多