2010-08-26 91 views
104

我有一个字符串说修剪字符串中的最后一个字符

"Hello! world!" 

我想做一个微调或删除取出!关闭世界但不是关闭你好。

+1

也许是超出你的要求,但我可以问你花一点时间来考虑使用我提出的正则表达式? – 2010-08-26 11:01:38

+0

的[删除字符串的最后一个字符]可能的复制(http://stackoverflow.com/questions/7901360/delete-last-char-of-string) – 2016-08-25 16:03:50

回答

202
"Hello! world!".TrimEnd('!'); 

read more

编辑:

我这种类型的相当多每个人都建议删除给出的最后一个字符的问题已经注意到了串。但是这不符合修剪方法的定义。

修剪 - 删除从 开始和结束该实例的 空格都出现。

MSDN-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); } 
+1

只要您始终知道要从字符串末尾删除的字符,这样会更好。 – 2010-08-26 08:41:11

+0

正如他的sed“出了‘!’”,但如果我们不知道我们应该使用,'S = s.TrimEnd(S [s.Length - 1]);',从字符串删除最后一个字符不完整填写修剪的定义。 – 2010-08-26 09:41:40

+0

您好Vash,您对使用RegEx的解决方案有什么看法?它符合Thqr的要求,可以删除'!'来自任何“世界”的字符!表达式,放在表达式的任何位置,只需一个代码行。 – 2010-08-26 10:59:54

51
String withoutLast = yourString.Substring(0,(yourString.Length - 1)); 
+10

只要确保yourString至少包含1个字符。 – 2010-08-26 08:25:02

+0

也确保你的字符串总是以你想删除的字符结束EG:“Hello!World”最终会成为“Hello!Worl”。 – 2013-07-18 21:04:08

4
string helloOriginal = "Hello! World!"; 
string newString = helloOriginal.Substring(0,helloOriginal.LastIndexOf('!')); 
2
string s1 = "Hello! world!" 
string s2 = s1.Substring(0, s1.Length - 1); 
Console.WriteLine(s1); 
Console.WriteLine(s2); 
5
 string s1 = "Hello! world!"; 
     string s2 = s1.Trim('!'); 
+0

注意,这也将删除‘!’从字符串的开头开始... – contactmatt 2017-04-25 22:03:00

+0

如何使用endswith属性?可以在这里使用吗? – SaMolPP 2017-05-25 10:01:06

-3

:从字符串的结尾, 但如果你只想删除最后一个字符,你应该用这个“!”从一个特定的表达(在你的情况下,“世界”)字符,那么你可以使用这个正则表达式

string input = "Hello! world!"; 

string output = Regex.Replace(input, "(world)!", "$1", RegexOptions.Multiline | RegexOptions.Singleline); 

// result: "Hello! world" 

1 $特殊字符包含所有匹配的“世界”的表情,并用它来取代原来的“世界!”表达

1

你也可以使用:

public static class Extensions 
{ 

     public static string RemovePrefix(this string o, string prefix) 
     { 
      if (prefix == null) return o; 
      return !o.StartsWith(prefix) ? o : o.Remove(0, prefix.Length); 
     } 

     public static string RemoveSuffix(this string o, string suffix) 
     { 
      if(suffix == null) return o; 
      return !o.EndsWith(suffix) ? o : o.Remove(o.Length - suffix.Length, suffix.Length); 
     } 

    } 
0

我只是因为我已经在使用它内嵌了编写使用TrimEnd延伸的路径,并很高兴与它... 即:

static class Extensions 
{ 
     public static string RemoveLastChars(this String text, string suffix) 
     {    
      char[] trailingChars = suffix.ToCharArray(); 

      if (suffix == null) return text; 
      return text.TrimEnd(trailingChars); 
     } 

} 

确保您在使用静态类的类的命名空间; P和用法是:

string _ManagedLocationsOLAP = string.Empty; 
_ManagedLocationsOLAP = _validManagedLocationIDs.RemoveLastChars(",");   
4

的从一个字符串修整最后字符的另一个例子:

string outputText = inputText.Remove(inputText.Length - 1, 1); 

您可以将其放入扩展方法,并防止空字符串等。

7
if (yourString.Length > 1) 
    withoutLast = yourString.Substring(0, yourString.Length - 1); 

if (yourString.Length > 1) 
    withoutLast = yourString.TrimEnd().Substring(0, yourString.Length - 1); 

...如果你想删除从年底非空白字符。

+7

我赞成只是为了抵消downvote而没有评论。当人们这样做时,恨它。 – 2013-08-14 16:14:37

+1

它可能是因为有没有'TrimEnd()'方法,如果有它可以使后续的'Substring(..)'调用在短字符串上失败。 – Rory 2015-11-03 01:28:08

1

试试这个:

return((str).Remove(str.Length-1));