Видаліть останні три символи з рядка


122

Я хочу видалити останні три символи з рядка:

string myString = "abcdxxx"; 

Зауважте, що рядок - це динамічні дані.


1
Прочитати останні 3 символи = одне, видалити останні 3 символи = інше. Котрий?
Кірен Джонстоун

Відповіді:


234

прочитати останні 3 символи з рядка [Спочатку задане питання]

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

myString.Substring(myString.Length-3)

Отримує підрядку з цього примірника. Підрядка починається із заданої позиції символу. MSDN

Редагувати , для оновленої публікації

Видалити останні три символи з рядка [Оновлено запитання]

Для видалення останніх трьох символів з рядка ви можете використовувати 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
це не відповідь
гальмує

21
Спасибі @braks, спочатку задане питання було "прочитати останні 3 символи з рядка". Це згодом відредаговано, і я не знав, дивіться історію редагування питання. Ваш коментар допоміг мені виправити свою відповідь, яка стала неправильною після редагування питання.
Аділ


13

Я перечитав усе це, але хотів чогось більш елегантного. Просто для видалення певної кількості символів з кінця рядка:

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

вихід:

"he"

7
Цей досить "креативний", оскільки йому не потрібна довжина струни, але зворотна операція, ймовірно, дорожча.
Олександр

4
Повернення рядка, безумовно, дорожче, ніж підрахунок його символів. Потрібно побудувати цілу нову рядок, потім її скопіювати оригінал, тоді початковий рядок потрібно зібрати сміття.
Метт Грегорі

Рядки @MattGregory незмінні: Remove, Substring, будь-яка функція string створює нову рядок. Перезапис оригінального вказівника завжди викликає збирання сміття. Це все ще повільніше, оскільки Enumerable.Reverseбуферизація рядка в a char[], потім буферизація в нову, char[]яка на 3 коротше, а потім генерує нову string(з внутрішньо іншою char[]). Кращим підходом буде new string("hello".Reverse().Skip(3))або просто написання власної функції розширення рядків, AllBut(this string in, int i)яка використовує Substring.
Вольфзун

@MattGregory Це навіть не "підрахунок" символів рядка, рядок Lengthзберігається.
Вольфзун

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.