【问题标题】:How to remove first 10 characters from a string?如何从字符串中删除前 10 个字符?
【发布时间】:2011-11-03 10:31:53
【问题描述】:

如何忽略字符串的前 10 个字符?

输入:

str = "hello world!";

输出:

d!

【问题讨论】:

  • string.Substring(9);其中 9 是起始索引
  • 记得先检查字符串是否至少有 10 个字符,否则会出现异常。
  • 为什么子字符串不支持 (startIndex,endindex) ?每次我们必须计算长度.. :-(
  • @Waqas:其实是str.Substring(10),参数是子串开始被提取的位置

标签: c# asp.net .net string substring


【解决方案1】:

str = str.Remove(0,10); 删除前 10 个字符

str = str.Substring(10); 创建从第 11 个字符开始到字符串末尾的子字符串。

出于您的目的,它们的工作方式应该相同。

【讨论】:

    【解决方案2】:
    str = "hello world!";
    str.Substring(10, str.Length-10)
    

    您需要执行长度检查,否则会引发错误

    【讨论】:

    • @DrorBar 在 C# 中,方法名称遵循 PascalCase。 substring() 不会编译,因为该方法被称为 Substring()
    • @DavidKlempfner 糟糕,我以为这是 JavaScript。
    【解决方案3】:

    正如其他人指出的那样,子字符串可能是您想要的。但只是为了添加另一个选项......

    string result = string.Join(string.Empty, str.Skip(10));
    

    你甚至不需要检查这个长度! :) 如果它少于 10 个字符,你会得到一个空字符串。

    【讨论】:

    • 为了更好的可读性,您可以使用“”。现在它的编译方式与 string.Empty 完全相同。
    • 它没有,"" 创建一个新字符串,而 string.Empty 引用一个。就性能而言并不重要(我的意思是它是一个空字符串,所以是的......)但只是想指出这一点:)
    • "" 确实不会创建新字符串,请参阅此处stackoverflow.com/a/263257/604613
    【解决方案4】:

    Substring有两种重载方法:

    public string Substring(int startIndex);//The substring starts at a specified character position and continues to the end of the string.
    
    public string Substring(int startIndex, int length);//The substring starts at a specified character position and taking length no of character from the startIndex.
    

    因此,对于这种情况,您可以使用如下第一种方法:

    var str = "hello world!";
    str = str.Substring(10);
    

    这里的输出是:

    d!
    

    如果您可以通过检查其长度来应用防御性编码。

    【讨论】:

      【解决方案5】:

      Substring 有一个名为 startIndex 的参数。根据你要开始的索引来设置。

      【讨论】:

        【解决方案6】:

        您可以使用以下 Line 删除 Char ,

        :- 首先检查 String 是否有足够的字符来删除,比如

           string temp="Hello Stack overflow";
           if(temp.Length>10)
           {
            string textIWant = temp.Remove(0, 10);
           }
        

        【讨论】:

          【解决方案7】:

          使用子串方法。

          string s = "hello world";
          s=s.Substring(10, s.Length-10);
          

          【讨论】:

          • 如果字符串比起始索引短则抛出异常
          【解决方案8】:

          你可以使用Substring方法,它接受一个参数,即开始的索引。

          在我下面的代码中,我处理的情况是长度小于您想要的起始索引并且长度为零。

          string s = "hello world!";
          s = s.Substring(Math.Max(0, Math.Min(10, s.Length - 1)));
          

          【讨论】:

          • 当前如果字符串少于 10 个字符,则返回字符串的最后一个字符。
          【解决方案9】:

          为:

          var str = "hello world!";
          

          若要获得不含前 10 个字符的结果字符串,如果字符串的长度小于或等于 10,则为空字符串,您可以使用:

          var result = str.Length <= 10 ? "" : str.Substring(10);
          

          var result = str.Length <= 10 ? "" : str.Remove(0, 10);
          

          首选第一个变体,因为它只需要一个方法参数。

          【讨论】:

            【解决方案10】:

            无需在Substring 方法中指定长度。 因此:

            string s = hello world;
            string p = s.Substring(3);
            

            p 将是:

            “世界”。

            您需要满足的唯一例外是ArgumentOutOfRangeException 如果 startIndex 小于零或大于此实例的长度。

            【讨论】:

              【解决方案11】:

              从 C# 8 开始,您可以简单地使用范围运算符。这是处理此类情况的更有效和更好的方法。

              string AnString = "Hello World!";
              AnString = AnString[10..];
              

              【讨论】:

              • C# 8 在定位 .NET Framework 时不受支持。
              【解决方案12】:

              调用SubString() 分配一个新字符串。为了获得最佳性能,您应该避免额外的分配。从C# 7.2 开始,您可以利用Span 模式。

              定位 .NET Framework 时,包括 System.Memory NuGet 包。对于.NET Core 项目,这是开箱即用的。

              static void Main(string[] args)
              {
                  var str = "hello world!";
                  var span = str.AsSpan(10); // No allocation!
              
                  // Outputs: d!
                  foreach (var c in span)
                  {
                      Console.Write(c);
                  }
              
                  Console.WriteLine();
              }
              

              【讨论】:

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