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


Answers:


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

阅读更多

编辑:

我在这类问题中注意到的是,每个人都建议删除给定字符串的最后一个字符。但这不符合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]);
     }
  }
}

注意,如果要删除具有相同值的所有字符,即(!!!!),上述方法将删除所有存在的“!” 从字符串末尾开始,但是如果您只想删除最后一个字符,则应使用以下命令:

else { return str.Remove(str.Length - 1); }

1
只要您始终知道要从字符串末尾删除的字符,这会更好。
Nimrod Shory,2010年

1
嗨,Vash,您如何看待我使用RegEx的解决方案?它可以满足Thqr的要求,并且可以删除“!” 来自任何“世界”的char!表达式,可以将表达式放置在任何位置,而只需一行代码。
Marcello Faga 2010年

24
-1此解决方案将删除所有相同的结尾字符!例如,它将变成“ Hello !!!!!!!!” 进入“你好”,这将删除最后一个字符。
Kugel

1
@Kugel,您完全正确,这就是为什么您应该再读一次我的答案。为了进行说明,OP不会询问如何删除最后一个字符,而是会如何修剪它。
DamianLeszczyński-Vash11年

1
@Vash-如何使用方法-“ Hello!world!”。TrimEnd('!');删除单引号'
蒸汽

65
String withoutLast = yourString.Substring(0,(yourString.Length - 1));

14
只要确保yourString至少包含1个字符即可。
Nimrod Shory,2010年

还请确保您的字符串始终以您要删除EG的字符结尾:“ Hello!World”将以“ Hello!Worl”结尾。
内森·库普

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

要么

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

...以防您想从结尾删除非空白字符。


9
我投票赞成只是为了抵消不愿发表评论的反对意见。人们这样做时会讨厌它。
杰夫雷迪

2
可能是因为没有TrimEnd()方法,如果没有方法,则可能导致后续Substring(..)调用在短字符串上失败。
罗里2015年

7
        string s1 = "Hello! world!";
        string s2 = s1.Trim('!');

如何使用endswith属性?可以在这里使用吗?
userAZLogicApps

1
Trim()的名称是如此糟糕。它会修剪所有前导和尾随字符(复数),TrimStart()和TrimEnd()也会如此
Antony Booth,


5
string helloOriginal = "Hello! World!";
string newString = helloOriginal.Substring(0,helloOriginal.LastIndexOf('!'));

5

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

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

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


3
string s1 = "Hello! world!"
string s2 = s1.Substring(0, s1.Length - 1);
Console.WriteLine(s1);
Console.WriteLine(s2);

2

您还可以使用以下代码:

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);
        }

    }

1

非常简单:

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


1

@DamianLeszczyński-Vash的略作修改的版本,可以确保仅删除特定字符。

public static class StringExtensions
{
    public static string TrimLastCharacter(this string str, char character)
    {
        if (string.IsNullOrEmpty(str) || str[str.Length - 1] != character)
        {
            return str;
        }
        return str.Substring(0, str.Length - 1);
    }
}

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(",");          

0

示例扩展类可以简化此操作:-

internal static class String
{
    public static string TrimEndsCharacter(this string target, char character) => target?.TrimLeadingCharacter(character).TrimTrailingCharacter(character);
    public static string TrimLeadingCharacter(this string target, char character) => Match(target?.Substring(0, 1), character) ? target.Remove(0,1) : target;
    public static string TrimTrailingCharacter(this string target, char character) => Match(target?.Substring(target.Length - 1, 1), character) ? target.Substring(0, target.Length - 1) : target;

    private static bool Match(string value, char character) => !string.IsNullOrEmpty(value) && value[0] == character;
}

用法

"!Something!".TrimLeadingCharacter('X'); // Result '!Something!' (No Change)
"!Something!".TrimTrailingCharacter('S'); // Result '!Something!' (No Change)
"!Something!".TrimEndsCharacter('g'); // Result '!Something!' (No Change)

"!Something!".TrimLeadingCharacter('!'); // Result 'Something!' (1st Character removed)
"!Something!".TrimTrailingCharacter('!'); // Result '!Something' (Last Character removed)
"!Something!".TrimEndsCharacter('!'); // Result 'Something'  (End Characters removed)

"!!Something!!".TrimLeadingCharacter('!'); // Result '!Something!!' (Only 1st instance removed)
"!!Something!!".TrimTrailingCharacter('!'); // Result '!!Something!' (Only Last instance removed)
"!!Something!!".TrimEndsCharacter('!'); // Result '!Something!'  (Only End instances removed)

-5

如果要删除“!” 特定表达式中的字符(在您的情况下为“ world”),则可以使用此正则表达式

string input = "Hello! world!";

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

// result: "Hello! world"

$ 1特殊字符包含所有匹配的“ world”表达式,用于替换原始的“ world!”。表达

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.