Java - видалення першого символу рядка


215

У Java у мене є рядок:

Jamaica

Я хотів би видалити перший символ рядка, а потім повернутися amaica

Як би я це зробив?

Відповіді:


341

Використовуйте substring()функцію з аргументом, 1щоб перевести підрядку з позиції 1 ( після першого символу) до кінця рядка (другий аргумент залишається за замовчуванням на повну довжину рядка).

"Jamaica".substring(1);

21
Важливо зауважити, що це насправді не видаляє символ із рядка - це дає вам нову рядок, який містить усі символи старої рядки, крім першої. Немає можливості насправді змінити рядок.
Кріс Додд

Здається, посилання більше не діє. Спробуйте замість цього посилання: substring (int)
Крістіан Хофманн,

1
Так, якщо ви хочете видалити перші n символів рядкової змінної, зробіть це: variable = varia.substring (n);
Mitulát báti

67
public String removeFirstChar(String s){
   return s.substring(1);
}

12
Якщо ви збираєтеся визначити нову функцію, принаймні виберіть відповідну назву на зразок removeFirst().
moinudin

55

Використовуйте substring()та надайте кількість символів, які ви хочете обрізати спереду.

String value = "Jamaica";
value = value.substring(1);

Відповідь: "amaica"


47

У Java видаляйте провідний символ лише в тому випадку, якщо це певний символ

Використовуйте термінальний оператор 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

Java, видаліть усі екземпляри символу будь-де в рядку:

String a = "Cool";
a = a.replace("o","");
//variable 'a' contains the string "Cl"

Java, видаліть перший екземпляр символу будь-де в рядку:

String b = "Cool";
b = b.replaceFirst("o","");
//variable 'b' contains the string "Col"

4
header = header.substring(header.startsWith("#") ? 1 : 0);
СУХА

3
Або з регулярним виразом:header = header.replaceFirst("^#","");
Аарон Бленкуш

18

Ви можете використовувати метод підрядкиString класу, який приймає лише початковий індекс і повертає підрядку, яка починається символом у вказаному індексі і поширюється до кінця рядка.

String str = "Jamaica";
str = str.substring(1);


11

Головне, що потрібно зрозуміти в Java - це те, що рядки незмінні - ви не можете їх змінити. Тому немає сенсу говорити про "видалення символу з рядка". Натомість ви створюєте НОВУ рядок із лише потрібними символами. Інші публікації в цьому питанні дають вам різні способи зробити це, але важливо розуміти, що вони ні в якому разі не змінюють початковий рядок. Будь-які посилання на стару рядок продовжуватимуть посилатися на стару рядок (якщо ви не зміните їх на іншу рядок) і на новостворену рядок не впливатиме.

Це має ряд наслідків для продуктивності. Кожен раз, коли ви "модифікуєте" рядок, ви фактично створюєте нову рядок із усіма накладними накладними витратами (розподіл пам'яті та збирання сміття). Отже, якщо ви хочете внести ряд модифікацій у рядок і піклуватися лише про кінцевий результат (проміжні рядки будуть мертвими, як тільки ви їх модифікуєте), може бути більше сенсу використовувати StringBuilder або StringBuffer замість цього.


9

ви можете зробити так:

String str="Jamaica";
str=str.substring(1, title.length());
return str;

або взагалі:

public String removeFirstChar(String str){
   return str.substring(1, title.length());
}

8

метод substring () повертає нову рядок, що містить підпорядкованість символів, що містяться в цій послідовності.

Підрядок починається в зазначених startі триває до символу в index end - 1.

Він має дві форми. Перший є

  1. String substring(int FirstIndex)

Тут FirstIndex вказує індекс, з якого почнеться підрядка. Ця форма повертає копію підрядки, яка починається з FirstIndex і запускається до кінця рядка, що викликає.

  1. 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'

4

Я натрапив на ситуацію, коли мені довелося видалити не тільки першого символу (якщо це був а #, але й перший набір символів.

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і це працює також.


1
Виникне проблема, якщо myString == "#", оскільки рядок в якийсь момент виявиться поза межами. Щоб цього не допустити, ви можете зробити (! MyString.isEmpty () && myString.charAt (0))
Крістіан,

2

Іншим рішенням ви можете вирішити свою проблему, використовуючи, наприклад, replaceAllрегекс ^.{1}( демо-версію ):

String str = "Jamaica";
int nbr = 1;
str = str.replaceAll("^.{" + nbr + "}", "");//Output = amaica

1

Моя версія видалення провідних символів, однієї чи кількох. Наприклад, 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);
}
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.