【问题标题】:Substring a string from the end of the string从字符串的末尾子串一个字符串
【发布时间】:2011-06-24 12:20:44
【问题描述】:

我需要从字符串末尾删除两个字符。

所以:

string = "Hello Marco !"

必须

Hello Marco

我该怎么做?

【问题讨论】:

    标签: c# .net


    【解决方案1】:

    你可以这样做:

    string str = "Hello Marco !";
    str = str.Substring(0, str.Length - 2);
    

    【讨论】:

    • @Alexander 我不知道你在说什么语言,但在 .net c# 中,这是一种有效的方法。也是合适的情况。
    • 非常抱歉 - 我没有注意到有人提到了 c#。我只是在寻找方法签名并找到了这个:)
    • 这解决了 OP 的情况,但它实际上并没有回答如何从字符串末尾运行子字符串的问题。你的答案从字符串末尾截掉了两个字母。
    • @Maritim OP 的问题有点令人困惑,但他的解释说,我引用“我需要从字符串末尾删除两个字符”。
    【解决方案2】:
    s = s.Substring(0, Math.Max(0, s.Length - 2))
    

    包括长度小于2的情况

    【讨论】:

      【解决方案3】:

      C# 8 引入了允许您编写的索引和范围

      str[^2..]
      

      这相当于

      str.Substring(str.Length - 2, 2)
      

      事实上,这几乎就是编译器会生成的,所以没有开销。

      请注意,如果范围不在字符串内,您将获得ArgumentOutOfRangeException

      【讨论】:

      • 9年后,我迟到了一天:)
      • 这是现代 C# 中的正确解决方案
      • 即使这是我真正想要的,问题也需要前 n-2 个字符,而不是最后 2 个字符。
      • 要获取前 n - 2 个字符,您可以使用 str[..^2]。 2 甚至不需要是常数,所以也可以写成str[..^"test".Length]
      【解决方案4】:

      怎么样

      string s = "Hello Marco !";
      s = s.Substring(0, s.Length - 2);
      

      【讨论】:

        【解决方案5】:

        我会为不需要的字符修剪结尾:

        s = s.TrimEnd(' ', '!');
        

        确保即使有更多空间也能正常工作。或者如果您想确保它始终有效,则更好,因为输入文本似乎来自用户:

        Regex r = new Regex(@"(?'purged'(\w|\s)+\w)");
        Match m = r.Match("Hello Marco   !!");
        if (m.Success)
        {
            string result = m.Groups["purged"].Value;
        }
        

        这样你就更安全了。基于必须删除最后两个字符这一事实的清除太弱了。

        【讨论】:

          【解决方案6】:

          您是否查看了 MSDN 文档(或 IntelliSense)? String.Substring method 怎么样?

          您可以使用Length property 获取长度,从中减去两个,然后将子字符串从开头返回到结尾的 2 个字符。 例如:

          string str = "Hello Marco !";
          str = str.Substring(0, str.Length - 2);
          

          【讨论】:

            【解决方案7】:

            如果是未知数量的字符串,您可以通过以下方式修剪最后一个字符 s = s.TrimEnd('','!').Trim();

            您是否考虑过使用正则表达式?如果您只想允许字母数字字符,您可以使用正则表达式替换符号,如果不是 !你得到一个 %?

            【讨论】:

              【解决方案8】:

              试试这个:

              var s = "Hello Marco !";
              
              var corrected = s.Substring(0, s.Length - 2);
              

              【讨论】:

                【解决方案9】:
                string s = "Hello Marco !";
                s = s.Remove(s.length - 2, 2);
                

                【讨论】:

                • 这只获取最后两个字符。
                • @Yuck,是的,我打算删除并且习惯性地做了子字符串。
                猜你喜欢
                • 2014-09-18
                • 1970-01-01
                • 2019-09-26
                • 2013-11-12
                • 2010-11-05
                • 1970-01-01
                相关资源
                最近更新 更多