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


122

Я хочу удалить последние три символа из строки:

string myString = "abcdxxx"; 

Обратите внимание, что строка - это динамические данные.


1
Прочитать последние 3 символа = одно, удалить последние 3 символа = другое. Который?
— Кирен Джонстон,

Ответы:


234

прочитать последние 3 символа из строки [Первоначально заданный вопрос]

Вы можете использовать string.Substring и дать ему начальный индекс, и он получит подстроку, начиная с данного индекса до конца.

myString.Substring(myString.Length-3)

Получает подстроку из этого экземпляра. Подстрока начинается с указанной позиции символа. MSDN

Изменить , для обновленного сообщения

Удалить последние 3 символа из строки [Обновленный вопрос]

Чтобы удалить последние три символа из строки, вы можете использовать string.Substring (Int32, Int32) и дать ей начальный индекс 0и конечный индекс на три меньше длины строки . Он получит подстроку перед последними тремя символами.

myString = myString.Substring(0, myString.Length-3);

String.Substring Метод (Int32, Int32)

Получает подстроку из этого экземпляра. Подстрока начинается с указанной позиции символа и имеет указанную длину.

Вы также можете использовать метод String.Remove (Int32) для удаления последних трех символов, передав начальный индекс как длину - 3 , он будет удалять от этой точки до конца строки.

myString = myString.Remove(myString.Length-3)

Метод String.Remove (Int32)

Возвращает новую строку, в которой все символы в текущем экземпляре, начиная с указанной позиции и продолжаясь до последней позиции, были удалены.


13
это не ответ
— тормозит 05

21
Спасибо @braks, изначально был задан вопрос: «Прочитать последние 3 символа из строки». Это позже отредактировано, и я не знал, см. Историю редактирования вопроса. Ваш комментарий помог мне исправить мой ответ, который стал неправильным после редактирования вопроса.
— Адиль


13

Я прочитал все это, но захотелось чего-то более элегантного. Просто чтобы удалить определенное количество символов из конца строки:

string.Concat("hello".Reverse().Skip(3).Reverse());

вывод:

"he"

7
Этот вариант довольно «креативный», так как ему не нужна длина строки, но обратная операция, вероятно, дороже.
— Aleksandar

4
Переворачивание строки определенно дороже, чем подсчет ее символов. Необходимо создать целую новую строку, затем скопировать в нее исходную строку, а затем эту исходную строку нужно очистить от мусора.
— Мэтт Грегори

Строки @MattGregory неизменяемы: Remove, Substring, любая строковая функция генерирует новую строку. Перезапись исходного указателя всегда вызывает сборку мусора. Это все еще медленнее, так как Enumerable.Reverseстрока буферизуется в a char[], затем буферизуется в новую, char[]которая на 3 короче, а затем генерируется новая string(с внутренней другой char[]). Лучшим подходом было бы new string("hello".Reverse().Skip(3))или просто написать свою собственную функцию расширения строки, AllBut(this string in, int i)которая использует Substring.
— Wolfzoon

@MattGregory Это даже не «подсчет» символов строки, строка Lengthхранит их.
— Wolfzoon

1
Теперь у нас тоже есть .SkipLast(n). Не нужно ничего менять. "hello".SkipLast(3)дает"he"
— AjitZero



5

Вы можете использовать String.Removeдля удаления с указанной позиции до конца строки.

myString = myString.Remove(myString.Length - 3);

4

Вероятно, это не совсем то, что вы ищете, поскольку вы говорите, что это «динамические данные», но с учетом строки из вашего примера это также работает:

? "abcdxxx".TrimEnd('x');
"abc"



2
   string myString = "abcdxxx";
   if (myString.Length<3)
      return;
   string newString=myString.Remove(myString.Length - 3, 3);

1

Удалить последние символы из строки

TXTB_DateofReiumbursement.Text = (gvFinance.SelectedRow.FindControl("lblDate_of_Reimbursement") as Label).Text.Remove(10)

.Text.Remove(10)// используется для удаления текста от индекса 10 до конца


1

Новый оператор диапазона C # 8.0 может стать отличным средством для достижения этой цели.

Пример:

var shortenedString = myString[0..^1]

0
items.Remove(items.Length - 3)

string.Remove()удаляет все элементы из этого индекса до конца. items.length - 3получает индекс 3 символа с конца


0

Легко. text = text.remove(text.length - 3), Я вычел 3, потому что Removeфункция удаляет все элементы из этого индекса до конца строки, которая есть text.length. Итак, если я вычитаю 3, я получаю строку с удаленными из нее 3 символами.

Вы можете обобщить это на удаление aсимволов из конца строки, например:

text = text.remove(text.length - a) 

Так что я поступил по той же логике. removeФункция удаляет все элементы из его внутренней части до конца строки , которая является длиной текста. Итак, если я вычту aиз длины строки, я получу строку сa удаленными символами.

Таким образом, это работает не только для 3, но и для всех положительных целых чисел, кроме случаев, когда длина строки меньше или равна a, в этом случае она вернет отрицательное число или 0.

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