我有一个字符串,比如说
"Hello! world!"
我想要对字符串进行修剪或删除操作,将字符串中的感叹号从"world!"中移除,但是不要从"Hello!"中移除。
"Hello! world!".TrimEnd('!');
编辑:
我注意到在这类问题中,几乎每个人都建议删除给定字符串的最后一个字符。但是这并不符合 Trim 方法的定义。
Trim - 从此实例的开头和结尾移除所有空白字符的出现。
根据该定义,仅从字符串中删除最后一个字符是不好的解决方案。
因此,如果我们想要“从字符串中删除最后一个字符”,我们应该这样做:
可以将其作为扩展方法实现,例如:
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]);
}
}
}
注意,如果您想删除所有相同值的字符,例如(!!!!),则上面的方法会从字符串末尾删除所有 '!' 的存在, 但是如果您只想删除最后一个字符,则应使用以下内容:
else { return str.Remove(str.Length - 1); }
String withoutLast = yourString.Substring(0,(yourString.Length - 1));
if (yourString.Length > 1)
withoutLast = yourString.Substring(0, yourString.Length - 1);
或者
if (yourString.Length > 1)
withoutLast = yourString.TrimEnd().Substring(0, yourString.Length - 1);
如果你想要删除末尾的非空格字符,可以这样做。
TrimEnd()
方法,如果有的话,它可能会使后续的Substring(..)
调用在短字符串上失败。 - Rorypublic static class StringExtensions
{
public static string TrimLastCharacters(this string str) => string.IsNullOrEmpty(str) ? str : str.TrimEnd(str[^1]);
}
但是,如答案中所述,这将删除该字符的所有出现。如果您只想删除最后一个字符,则应使用以下方法:
public static string RemoveLastCharacter(this string str) => string.IsNullOrEmpty(str) ? str : str[..^1];
C# 8 中的新功能简介:
符号 ^
称为“索引从末尾算起运算符”。符号 ..
称为“范围运算符”。^1
是 arr.length - 1
的简写。您可以使用 arr[1..]
获取数组中第一个字符后的所有项,或使用 arr[..^1]
获取最后一项之前的所有项。这只是一些快速示例。有关更多信息,请参见https://learn.microsoft.com/en-us/dotnet/csharp/whats-new/csharp-8 的“索引和范围”部分。
从字符串中删除最后一个字符的另一个示例:
string outputText = inputText.Remove(inputText.Length - 1, 1);
string s1 = "Hello! world!";
string s2 = s1.Trim('!');
试试这个:
return( (str).Remove(str.Length-1) );
string helloOriginal = "Hello! World!";
string newString = helloOriginal.Substring(0,helloOriginal.LastIndexOf('!'));
意思是将字符串 str 的最后一个字符删除。str = str.Remove( str.Length - 1 );
string s1 = "Hello! world!"
string s2 = s1.Substring(0, s1.Length - 1);
Console.WriteLine(s1);
Console.WriteLine(s2);
"Hello! world!"[..^1]; // 产生 "Hello! world"
- Granger