Java - удаление полуколонки из строки, если строка заканчивается им
У меня есть требование, в котором мне нужно удалить точку с запятой, если она присутствует в конце строки (только в конце). Я пробовал следующий код. Но все равно его не заменяют. Кто-нибудь может сказать, что мне нужно изменить в следующем коде в строке номер
(Я назвал здесь код Как удалить определенные символы из определенной строки в Java?)
public static void main(String[] args) {
String text = "wherabouts;";
System.out.println("SSS "+text.substring(text.length()-1));
if(text.substring(text.length()-1) == ";"){
text.replaceAll(";", "");
}
System.out.println("TEXT : "+text);
}
Ответы
Ответ 1
text.replaceAll(";", "");
Так как строки в Java неизменяемы, поэтому метод replaceALl()
не выполняет замену на месте, а возвращает новую измененную строку. Итак, вам нужно сохранить возвращаемое значение в другой строке. Кроме того, для соответствия полуколонии в конце вам нужно использовать квантор $
после ;
text = text.replaceAll(";$", "");
$
обозначает конец строки, так как вы хотите заменить последний semi-colon
..
Если вы не используете $
, он заменит все ;
на ваши строки.
Или для вашей работы вы можете просто использовать это, если хотите удалить последний ;
:
if (text.endsWith(";")) {
text = text.substring(0, text.length() - 1);
System.out.println(text);
}
UPDATE. И если в конце есть больше полуколоней:
text = text.replaceAll(";+$", "");
Ответ 2
String modifiedText = text.replaceAll(";$", "");
ИЛИ
text = text.replaceAll(";$", "");
ИЛИ
if (text.endsWith(";")) {
text = text.substring(0, text.length() - 1);
}
Примечание
Строки неизменяемы. Это означает, что вы не можете их изменить.
Поэтому вам нужно либо переназначить текст, либо установить его на новую переменную.
Ответ 3
Вы не должны забывать, что String неизменен. Итак, всякий раз, когда вы хотите его изменить, вы должны назначить результат переменной.
Возможное решение того, что вам нужно:
if (text.endsWith(";") {
text = text.substring(0, text.length() - 1);
}
Ответ 4
text = text.replaceAll(";", "");
Здесь немного дополнительного чтения для вас
http://javarevisited.blogspot.com/2010/10/why-string-is-immutable-in-java.html
Ответ 5
Строки в java неизменяемы, поэтому replaceAll
возвращает новую строку.
Do
text = text.replaceAll(";", "");
Ответ 6
Используйте .equals()
вместо ==
, если вы собираетесь использовать substring()
, а не charAt()
:
if(text.substring(text.length()-1).equals(";"))
Кроме того, переназначьте свою текстовую переменную:
text = text.replaceAll(";", "");
Ответ 7
if (text.endsWith(";")){
text = text.substring(0,text.length()-1);
}
Ответ 8
Вы используете неправильную версию String.substring
, вы можете использовать:
text.substring(0, text.length() - 1)
Ответ 9
Строка неизменна, поэтому после замены будет создана новая строка.
String newString = text.replace(";", "");
или
String newString = text.replaceAll(";$", "");
Ответ 10
В коде, который вы предоставили, имеется несколько проблем.
Используйте equals для сравнения объектов.
if(text.substring(text.length()-1).equals(";"))
Если вы хотите заменить только последний символ, вам не потребуется replaceAll.
Итак, сделайте либо
if(text.substring(text.length()-1).equals(";")) {
text = text.substring(0, text.length()-1);
}
или
text = text.replaceAll(";", "");
Ответ 11
public static void main(String[] args) {
String text_original = "wherabouts;";
char[] c = text_original.toCharArray();
System.out.println("TEXT original: "+ text_original);
String text_new = c[text_original.length()-1] == ';' ? text_original.substring(0,text_original.length()-2) : text_original;
System.out.println("TEXT new: "+text_new);
}
Ответ 12
Решение только для одной полуколонии
// Don't use regular expressions if you don't need to.
if (text.endsWith(";")) {
text = text.substring(0, text.length() - 1);
}
Более медленное решение для возможно более чем одной полуколонии
text.replaceAll(";+$", "");
Кроме того, вот некоторые другие проблемы с кодом, который вы изначально разместили, для справки.
if(text.substring(text.length()-1) == ";"){
Вы не можете сравнивать строки с ==
. Вместо этого вы должны сравнить их с .equals()
. Это было бы правильно написано так: ...ength()-1).equals(";")
.
text.replaceAll(";", "");
Это заменяет все точки с запятой, которые он находит. Это означает, что если ваша строка была some;thing;
, она превратила бы ее в something
, но вы хотите удалить только последнюю точку с запятой, например: some;thing
. Чтобы сделать это правильно, вам нужно искать конец строки, используя специальный символ $
следующим образом:
text.replaceAll(";$", "");