У Java у мене є рядок:
Jamaica
Я хотів би видалити перший символ рядка, а потім повернутися amaica
Як би я це зробив?
У Java у мене є рядок:
Jamaica
Я хотів би видалити перший символ рядка, а потім повернутися amaica
Як би я це зробив?
Відповіді:
Використовуйте substring()
функцію з аргументом, 1
щоб перевести підрядку з позиції 1 ( після першого символу) до кінця рядка (другий аргумент залишається за замовчуванням на повну довжину рядка).
"Jamaica".substring(1);
public String removeFirstChar(String s){
return s.substring(1);
}
removeFirst()
.
Використовуйте substring()
та надайте кількість символів, які ви хочете обрізати спереду.
String value = "Jamaica";
value = value.substring(1);
Відповідь: "amaica"
Використовуйте термінальний оператор Java, щоб швидко перевірити, чи є ваш персонаж, перш ніж видалити його. Це позбавляє провідного символу лише в тому випадку, якщо він існує, якщо він пройшов порожній рядок, повертає порожню нитку.
String header = "";
header = header.startsWith("#") ? header.substring(1) : header;
System.out.println(header);
header = "foobar";
header = header.startsWith("#") ? header.substring(1) : header;
System.out.println(header);
header = "#moobar";
header = header.startsWith("#") ? header.substring(1) : header;
System.out.println(header);
Друкує:
blankstring
foobar
moobar
String a = "Cool";
a = a.replace("o","");
//variable 'a' contains the string "Cl"
String b = "Cool";
b = b.replaceFirst("o","");
//variable 'b' contains the string "Col"
header = header.substring(header.startsWith("#") ? 1 : 0);
header = header.replaceFirst("^#","");
Ви можете використовувати метод підрядкиString
класу, який приймає лише початковий індекс і повертає підрядку, яка починається символом у вказаному індексі і поширюється до кінця рядка.
String str = "Jamaica";
str = str.substring(1);
Головне, що потрібно зрозуміти в Java - це те, що рядки незмінні - ви не можете їх змінити. Тому немає сенсу говорити про "видалення символу з рядка". Натомість ви створюєте НОВУ рядок із лише потрібними символами. Інші публікації в цьому питанні дають вам різні способи зробити це, але важливо розуміти, що вони ні в якому разі не змінюють початковий рядок. Будь-які посилання на стару рядок продовжуватимуть посилатися на стару рядок (якщо ви не зміните їх на іншу рядок) і на новостворену рядок не впливатиме.
Це має ряд наслідків для продуктивності. Кожен раз, коли ви "модифікуєте" рядок, ви фактично створюєте нову рядок із усіма накладними накладними витратами (розподіл пам'яті та збирання сміття). Отже, якщо ви хочете внести ряд модифікацій у рядок і піклуватися лише про кінцевий результат (проміжні рядки будуть мертвими, як тільки ви їх модифікуєте), може бути більше сенсу використовувати StringBuilder або StringBuffer замість цього.
метод substring () повертає нову рядок, що містить підпорядкованість символів, що містяться в цій послідовності.
Підрядок починається в зазначених start
і триває до символу в index end - 1
.
Він має дві форми. Перший є
String substring(int FirstIndex)
Тут FirstIndex вказує індекс, з якого почнеться підрядка. Ця форма повертає копію підрядки, яка починається з FirstIndex і запускається до кінця рядка, що викликає.
String substring(int FirstIndex, int endIndex)
Тут FirstIndex вказує початковий індекс, а endIndex - точку зупинки. Рядок, що повертається, містить усі символи від початкового індексу, аж до індексу закінчення, але не включає його.
String str="Amiyo";
// prints substring from index 3
System.out.println("substring is = " + str.substring(3)); // Output "yo'
Я натрапив на ситуацію, коли мені довелося видалити не тільки першого символу (якщо це був а #
, але й перший набір символів.
String myString = ###Hello World
може стати відправною точкою, але я хотів би лише зберегти це Hello World
. це можна зробити наступним чином.
while (myString.charAt(0) == '#') { // Remove all the # chars in front of the real string
myString = myString.substring(1, myString.length());
}
У випадку while
з ОП замініть, if
і це працює також.
Іншим рішенням ви можете вирішити свою проблему, використовуючи, наприклад, replaceAll
регекс ^.{1}
( демо-версію ):
String str = "Jamaica";
int nbr = 1;
str = str.replaceAll("^.{" + nbr + "}", "");//Output = amaica
Моя версія видалення провідних символів, однієї чи кількох. Наприклад, String str1 = "01234", при видаленні ведучого "0" результат буде "1234". Для String str2 = "000123" результат знову буде "123". А для String str3 = "000" результатом буде порожній рядок: "". Така функціональність часто корисна при перетворенні числових рядків у числа. Перевага цього рішення в порівнянні з регулярним виразом (substituAll (...)) полягає в тому, що це набагато швидше. Це важливо при обробці великої кількості рядків.
public static String removeLeadingChar(String str, char ch) {
int idx = 0;
while ((idx < str.length()) && (str.charAt(idx) == ch))
idx++;
return str.substring(idx);
}