В 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);
Ответ: "амайка"
Используйте троичный оператор 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("^#","");
Главное, что нужно понимать в 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
с OP замените на, if
и он работает также.
Другое решение, вы можете решить вашу проблему с replaceAll
помощью некоторого регулярного выражения ^.{1}
( regex demo ), например:
String str = "Jamaica";
int nbr = 1;
str = str.replaceAll("^.{" + nbr + "}", "");//Output = amaica
Моя версия удаления ведущих символов, одного или нескольких. Например, 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);
}