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

215

В Java у меня есть строка:

Jamaica

Я хотел бы удалить первый символ строки, а затем вернуть amaica

Как бы я это сделал?

Calibre2010
источник

Ответы:

343

Используйте substring()функцию с аргументом, 1чтобы получить подстроку с позиции 1 ( после первого символа) до конца строки (оставляя второй аргумент по умолчанию равным полной длине строки).

"Jamaica".substring(1);
moinudin
источник
21
Важно отметить, что это на самом деле не удаляет символ из строки - он дает вам новую строку, в которой есть все символы старой строки, кроме первого. Там нет никакого способа на самом деле изменить строку.
Крис Додд
Ссылка больше не действительна. Вместо этого попробуйте следующую ссылку: substring (int)
Christian Hoffmann
1
Да, если вы хотите удалить первые n символов строковой переменной, вы делаете это: variable = variable.substring (n);
Митулат бат
68
public String removeFirstChar(String s){
   return s.substring(1);
}
Ахмед Котб
источник
12
Если вы собираетесь определить новую функцию, выберите хотя бы подходящее имя, например removeFirst().
Мойнудин
55

Используйте substring()и укажите количество символов, которые вы хотите обрезать спереди.

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

Ответ: "амайка"

Тилина Гихан Приянкара
источник
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

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

String str = "Jamaica";
str = str.substring(1);
codaddict
источник
11
public String removeFirst(String input)
{
    return input.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'
IntelliJ Amiya
источник
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с OP замените на, ifи он работает также.

Матье Брауэрс
источник
1
Будет проблема, если myString == "#", потому что строка будет вне границ в какой-то момент. Чтобы предотвратить это, вы можете сделать (! MyString.isEmpty () && myString.charAt (0))
Christian
2

Другое решение, вы можете решить вашу проблему с replaceAllпомощью некоторого регулярного выражения ^.{1}( regex demo ), например:

String str = "Jamaica";
int nbr = 1;
str = str.replaceAll("^.{" + nbr + "}", "");//Output = amaica
YCF_L
источник
1

Моя версия удаления ведущих символов, одного или нескольких. Например, String str1 = "01234", при удалении ведущего '0', результатом будет "1234". Для String str2 = "000123" результат снова будет "123". А для String str3 = "000" результатом будет пустая строка: "". Такая функциональность часто бывает полезна при преобразовании числовых строк в числа. Преимущество этого решения по сравнению с регулярным выражением (replaceAll (...)) состоит в том, что оно намного быстрее. Это важно при обработке большого количества строк.

 public static String removeLeadingChar(String str, char ch) {
    int idx = 0;
    while ((idx < str.length()) && (str.charAt(idx) == ch))
        idx++;
    return str.substring(idx);
}
Андрушенко Александр
источник