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

时间:2010-08-26 08:21:19

标签: c# .net

我有一个字符串说

"Hello! world!" 

我想修剪或删除以取出!关闭世界但不关闭你好。

15 个答案:

答案 0 :(得分:254)

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

read more

修改

在这类问题中我注意到了很多人都建议删除给定字符串的最后一个字符串。但这并不符合Trim方法的定义。

  

修剪 - 删除所有出现的内容   来自的空白字符   这个实例的开头和结尾。

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 :(得分:57)

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

答案 2 :(得分:8)

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

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

...如果你想从末尾删除一个非空白字符。

答案 3 :(得分:6)

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

答案 4 :(得分:5)

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

答案 5 :(得分:5)

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

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

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

答案 6 :(得分:3)

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

答案 7 :(得分:3)

试试这个:

setBoundsBias()

答案 8 :(得分: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);
        }

    }

答案 9 :(得分:1)

在 .NET 5 / C# 8 中:

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

public 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 中新内容的快速解释:

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

答案 10 :(得分: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(",");          

答案 11 :(得分:0)

非常简单:

  

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

答案 12 :(得分:0)

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

答案 13 :(得分: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)

答案 14 :(得分:-4)

如果你想删除'!'来自特定表达式的字符(在您的情况下为“world”),然后您可以使用此正则表达式

string input = "Hello! world!";

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

// result: "Hello! world"

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