Подтвердить что ты не робот

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);
}
4b9b3361

Ответ 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);
}

Ответ 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(";$", "");