【问题标题】:Why string.TrimEnd not removing only last character in string为什么 string.TrimEnd 不只删除字符串中的最后一个字符
【发布时间】:2013-07-06 11:12:53
【问题描述】:

我有如下字符串

2,44,AAA,BBB,1,0,,,

所以现在我只想删除上面字符串中的最后一个逗号。所以我想输出为

2,44,AAA,BBB,1,0,,

我决定如下使用 TrimeEnd

str.ToString.TrimEnd(',')

但它删除了 0 之后的所有逗号。所以我得到如下输出

2,44,AAA,BBB,1,0

为什么它会删除 0 后的所有 3 个逗号?我只需要删除字符串中的最后一个字符

【问题讨论】:

    标签: c# string trim


    【解决方案1】:

    为什么它会删除 0 之后的所有 3 个逗号?

    因为这就是 documented 要做的事情:

    返回值:
    从当前字符串的末尾删除 trimChars 参数中所有出现的字符后剩余的字符串。

    如果您只想删除最后一个字符,您可以使用:

    if (str.EndsWith(","))
    {
        str = str.Substring(0, str.Length - 1);
    }
    

    或等效:

    if (str.EndsWith(","))
    {
        str = str.Remove(str.Length - 1);
    }
    

    【讨论】:

    • @DannyBeckett:请不要从我的代码中删除大括号。我个人的编码风格(以及在我工作过的每家公司都强制执行的风格)是总是包含循环大括号、if 语句等。它避免了缩进可能暗示的问题当代码实际上表现不同时,它的行为是一种方式。
    【解决方案2】:

    这是意料之中的。 String.TrimEnd 从当前 String 对象中删除 所有 一组在数组中指定的尾随出现的字符

    TrimEnd(char[] trimChars) 方法从当前字符串中删除 trimChars 参数中的所有尾随字符。 在字符串末尾遇到第一个不在trimChars 中的字符时停止修剪操作

    改用这个:

    str = str.EndsWith(",") ? str.Substring(0, str.Length - 1) : str;
    

    【讨论】:

      【解决方案3】:

      你可以用这个:

      string s = "2,44,AAA,BBB,1,0,,,";
      s = s.Remove(s.Length-1, 1);
      

      【讨论】:

      • 这将删除 any 字符,无论它是否是逗号。
      • 不知道你是不是误会了……假设字符串是:string s = "2,44,AAA,BBB,1,0,,,123,会发生什么?
      • @DannyBeckett 这是对这个问题的合理解释,IMO。 如果已知字符串以逗号结尾,则无需检查。
      • @DannyBeckett-我在字符串中具体回答了这种情况。我知道这不是一种通用的方式,但在这种情况下它可以是一种方式
      【解决方案4】:

      请记住,TrimEnd() 不是就地函数。您应该将其结果重新分配给str

      str = str.TrimEnd(',')
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-01-21
        • 2011-12-15
        • 2017-08-19
        • 1970-01-01
        相关资源
        最近更新 更多