Обрезать последний символ из строки


157

У меня есть строка сказать

"Hello! world!" 

Я хочу сделать обрезку или удалить, чтобы вынуть! От мира, но не от Привет.


1
Может быть, это не по вашей просьбе, но могу ли я попросить вас подумать об использовании предложенного мной регулярного выражения?
— Марчелло Фага

Ответы:


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

читать далее

РЕДАКТИРОВАТЬ:

Что я заметил в этом типе вопросов, которые почти все предлагают удалить последний символ данной строки. Но это не соответствует определению метода 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
Это лучше, если вы всегда знаете, какой символ вы хотите удалить из конца строки.
— Нимрод Шори

1
Привет, Ваш, что вы думаете о моем решении с использованием RegEx? Он выполняет запрос Thqr и позволяет удалить '!' символ из любого "мира!" выражение, где бы оно ни находилось, всего в одной строке кода.
— Марчелло Фага

24
-1 Это решение удалит все одинаковые конечные символы! Например, было бы "Привет !!!!!!!!" в «Привет», который удаляет больше, чем последний символ.
— Кугель

1
@ Кугель, Вы совершенно правы, и поэтому вы должны прочитать еще раз мой ответ. Для объяснения OP не спрашивают, как убрать последний символ, а как его обрезать.
— Дамиан Лещинский - Ваш

1
@Vash - как удалить одиночную кавычку с помощью метода «Hello! World!». TrimEnd ('!');
— Steam

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

14
Просто убедитесь, что yourString содержит хотя бы 1 символ.
— Нимрод Шори

также убедитесь, что ваша строка всегда заканчивается символом, который вы хотите удалить 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(..)вызвать сбой последующего вызова на коротких строках.
— Рори

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

как работать со свойством? это можно использовать здесь?
— userAZLogicApps

1
Trim () так плохо назван. Он обрезает все начальные и конечные символы (множественное число), как и TrimStart () и TrimEnd ()
— Энтони Бут


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

5

Еще один пример обрезки последнего символа в строке:

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

Вы можете поместить его в метод расширения и защитить его от пустой строки и т. Д.



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

Слегка измененная версия @Damian Leszczyń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

Пример класса Extension для упрощения этого:

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

Если вы хотите удалить «!» символ из определенного выражения («мир» в вашем случае), то вы можете использовать это регулярное выражение

string input = "Hello! world!";

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

// result: "Hello! world"

специальный символ $ 1 содержит все соответствующие выражения "мир" и используется для замены оригинального слова "мир!" выражение

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.