修剪字符串中的最后一个字符

Sph*_*hvn 144 .net c#

我有一个字符串说

"Hello! world!" 
Run Code Online (Sandbox Code Playgroud)

我想做一个修剪或删除取出!关闭世界但不关闭你好.

Dam*_*ash 278

"Hello! world!".TrimEnd('!');
Run Code Online (Sandbox Code Playgroud)

阅读更多

编辑:

我在这类问题中已经注意到,大家都建议删除给定字符串的最后一个字符串.但这不符合Trim方法的定义.

修剪 - 从此实例的开头和结尾删除所有出现的空格字符.

MSDN剪裁

在这个定义下,只删除字符串中的最后一个字符是不好的解

因此,如果我们想要"修剪字符串中的最后一个字符",我们应该这样做

作为扩展方法的示例:

public static class MyExtensions
{
  public static string TrimLastCharacter(this String str)
  {
     if(String.IsNullOrEmpty(str)){
        return str;
     } else {
        return str.TrimEnd(str[str.Length - 1]);
     }
  }
}
Run Code Online (Sandbox Code Playgroud)

注意,如果你想删除相同值的所有字符,即(!!!!),上面的方法将删除所有'!'的存在 从字符串的末尾开始,但是如果你只想删除最后一个字符,你应该使用它:

else { return str.Remove(str.Length - 1); }
Run Code Online (Sandbox Code Playgroud)

  • -1此解决方案将删除所有相同的结束字符!例如它会变成"你好!!!!!!!!" 进入"Hello",即删除多个最后一个字符. (21认同)

Nim*_*ory 62

String withoutLast = yourString.Substring(0,(yourString.Length - 1));
Run Code Online (Sandbox Code Playgroud)

  • 请确保yourString至少包含1个字符. (12认同)

Jam*_*mes 9

if (yourString.Length > 1)
    withoutLast = yourString.Substring(0, yourString.Length - 1);
Run Code Online (Sandbox Code Playgroud)

要么

if (yourString.Length > 1)
    withoutLast = yourString.TrimEnd().Substring(0, yourString.Length - 1);
Run Code Online (Sandbox Code Playgroud)

...如果您想从末尾删除非空白字符.

  • 我赞成只是在没有评论的情况下抵消了downvote.当人们这样做时,讨厌它. (8认同)
  • 可能是因为没有`TrimEnd()`方法,如果有的话可能会使后来的`Substring(..)`调用在短字符串上失败. (2认同)

JDu*_*ley 7

        string s1 = "Hello! world!";
        string s2 = s1.Trim('!');
Run Code Online (Sandbox Code Playgroud)


Kod*_*ody 7

在 .NET 5 / C# 8 中:

您可以将标记为答案的代码编写为:

public static class StringExtensions
{
    public static string TrimLastCharacters(this string str) => string.IsNullOrEmpty(str) ? str : str.TrimEnd(str[^1]);
}
Run Code Online (Sandbox Code Playgroud)

但是,正如答案中提到的,这会删除最后一个字符的所有出现。如果您只想删除最后一个字符,您应该这样做:

    public static string RemoveLastCharacter(this string str) => string.IsNullOrEmpty(str) ? str : str[..^1];
Run Code Online (Sandbox Code Playgroud)

对 C# 8 中的新内容的快速解释:

^称为“来自结束运算符的索引”。这..被称为“范围运算符”。^1是 的快捷方式arr.length - 1。您可以使用 获取数组第一个字符之后的所有项目,arr[1..]或者使用 获取最后一个字符之前的所有项目arr[..^1]。这些只是一些简单的例子。有关详细信息,请参阅https://learn.microsoft.com/en-us/dotnet/csharp/whats-new/csharp-8 的“指数和范围”部分。


M. *_*put 6

尝试这个:

return( (str).Remove(str.Length-1) );
Run Code Online (Sandbox Code Playgroud)


Nis*_*sim 5

string helloOriginal = "Hello! World!";
string newString = helloOriginal.Substring(0,helloOriginal.LastIndexOf('!'));
Run Code Online (Sandbox Code Playgroud)


Bro*_*nek 5

修剪字符串中最后一个字符的另一个例子:

string outputText = inputText.Remove(inputText.Length - 1, 1);
Run Code Online (Sandbox Code Playgroud)

您可以将它放入扩展方法并防止它出现空字符串等.