Как удалить последний символ из строки?

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

public String method(String str) {
    if (str.charAt(str.length()-1)=='x'){
        str = str.replace(str.substring(str.length()-1), "");
        return str;
    } else{
        return str;
    }
}

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

например, слово "поклонник"; после запуска метода я получаю " admie."Я хочу вернуть слову восхищаться.

24 ответов


replace заменит все экземпляры письма. Все, что вам нужно сделать, это использовать substring():

public String method(String str) {
    if (str != null && str.length() > 0 && str.charAt(str.length() - 1) == 'x') {
        str = str.substring(0, str.length() - 1);
    }
    return str;
}

почему не только один лайнер?

private static String removeLastChar(String str) {
    return str.substring(0, str.length() - 1);
}

Код

import java.util.*;
import java.lang.*;

public class Main {
    public static void main (String[] args) throws java.lang.Exception {
        String s1 = "Remove Last CharacterY";
        String s2 = "Remove Last Character2";
        System.out.println("After removing s1==" + removeLastChar(s1) + "==");
        System.out.println("After removing s2==" + removeLastChar(s2) + "==");

    }

    private static String removeLastChar(String str) {
        return str.substring(0, str.length() - 1);
    }
}

демо


Так как мы на тему, можно использовать регулярные выражения тоже

"aaabcd".replaceFirst(".$",""); //=> aaabc  

описанная проблема и предлагаемые решения иногда связаны с удалением сепараторов. Если это ваш случай, то посмотрите на Apache Commons StringUtils, у него есть метод под названием removeEnd очень элегантный.

пример:

StringUtils.removeEnd("string 1|string 2|string 3|", "|");

в результате: "строка 1 / строка 2 / строка 3"


public String removeLastChar(String s) {
    if (s == null || s.length() == 0) {
        return s;
    }
    return s.substring(0, s.length()-1);
}

Не пытайтесь изобрести колесо, в то время как другие уже написали библиотеки для выполнения строковых манипуляций: org.apache.commons.lang3.StringUtils.chop()


используйте этот:

 if(string.endsWith("x")) {

    string= string.substring(0, string.length() - 1);
 }

if (str.endsWith("x")) {
  return str.substring(0, str.length() - 1);
}
return str;

например, слово "поклонник"; после того, как я запускаю метод, я получаю " admie."Я хочу вернуть слову восхищаться.

В случае, если вы пытаетесь stem английские слова

Stemming-это процесс сокращения измененных (или иногда производных) слов до их стволовой, базовой или корневой формы-обычно письменной формы слова.

...

стеммер для английского языка, например, должен определите строку " кошки "(и, возможно," кошачьи"," кошачьи " и т. д.) как на основе корня "cat", так и "stemmer", "stemming", "stemmed", как на основе "stem". Алгоритм стеммирования сводит слова "рыбалка", "выловленный", "рыба" и "рыбак"к корневому слову "рыба".

разница между Lucene stemmers: EnglishStemmer, PorterStemmer, LovinsStemmer описывает некоторые параметры Java.


что касается читаемости, я нахожу это самым кратким

StringUtils.substring("string", 0, -1);

отрицательные индексы можно использовать в утилите StringUtils Apache. Все отрицательные числа обрабатываются из смещения от конца строки.


удаляет последнее появление "xxx":

    System.out.println("aaa xxx aaa xxx ".replaceAll("xxx([^xxx]*)$", ""));

удаляет последнее вхождение "xxx", если оно последнее:

    System.out.println("aaa xxx aaa  ".replaceAll("xxx\s*$", ""));

вы можете заменить "xxx" на то, что вы хотите, но следите за специальными символами


public String removeLastChar(String s) {
    if (!Util.isEmpty(s)) {
        s = s.substring(0, s.length()-1);
    }
    return s;
}

посмотрите на класс StringBuilder:

    StringBuilder sb=new StringBuilder("toto,");
    System.out.println(sb.deleteCharAt(sb.length()-1));//display "toto"

// Remove n last characters  
// System.out.println(removeLast("Hello!!!333",3));

public String removeLast(String mes, int n) {
    return mes != null && !mes.isEmpty() && mes.length()>n
         ? mes.substring(0, mes.length()-n): mes;
}

// Leave substring before character/string  
// System.out.println(leaveBeforeChar("Hello!!!123", "1"));

public String leaveBeforeChar(String mes, String last) {
    return mes != null && !mes.isEmpty() && mes.lastIndexOf(last)!=-1
         ? mes.substring(0, mes.lastIndexOf(last)): mes;
}

однострочный ответ (просто веселая альтернатива - не пробуйте это дома, а отличные ответы уже даны):

public String removeLastChar(String s){return (s != null && s.length() != 0) ? s.substring(0, s.length() - 1): s;}

почему бы не использовать escape sequence ... !

System.out.println(str + '\b');

жизнь теперь намного проще . XD ! ~ Читаемый однострочный


Java 8

import java.util.Optional;

public class Test
{
  public static void main(String[] args) throws InterruptedException
  {
    System.out.println(removeLastChar("test-abc"));
  }

  public static String removeLastChar(String s) {
    return Optional.ofNullable(s)
      .filter(str -> str.length() != 0)
      .map(str -> str.substring(0, str.length() - 1))
      .orElse(s);
    }
}

выход: test-ab


Если у вас есть специальный символ, как ; в json просто используйте строку.replace (";","") в противном случае вы должны переписать весь символ в строке минус последний.


 "String name" = "String name".substring(0, ("String name".length() - 1));

Im, используя это в моем коде, это легко и просто. он работает только тогда, когда строка > 0. Я подключил его к кнопке и внутри следующего Если сообщении

if ("String name".length() > 0) {
    "String name" = "String name".substring(0, ("String name".length() - 1));
}

мне пришлось написать код для аналогичной проблемы. Один из способов, которым я смог его решить, использовал рекурсивный метод кодирования.

static String removeChar(String word, char charToRemove)
{
    for(int i = 0; i < word.lenght(); i++)
    {
        if(word.charAt(i) == charToRemove)
        {
            String newWord = word.substring(0, i) + word.substring(i + 1);
            return removeChar(newWord, charToRemove);
        }
    }

    return word;
}

большая часть кода, который я видел в этой теме, не использует рекурсию, поэтому, надеюсь, я могу помочь вам или кому-то, у кого такая же проблема.


Как сделать символ в рекурсии в конце:

public static String  removeChar(String word, char charToRemove)
    {
        String char_toremove=Character.toString(charToRemove);
        for(int i = 0; i < word.length(); i++)
        {
            if(word.charAt(i) == charToRemove)
            {
                String newWord = word.substring(0, i) + word.substring(i + 1);
                return removeChar(newWord,charToRemove);
            }
        }
        System.out.println(word);
        return word;
    }

например:

removeChar ("hello world, let's go!",'l') → "heo word, et's go!llll"
removeChar("you should not go",'o') → "yu shuld nt goooo"

вот ответ, который работает с кодовыми точками вне базовой многоязычной плоскости (Java 8+).

С использованием потоков:

public String method(String str) {
    return str.codePoints()
            .limit(str.codePoints().count() - 1)
            .mapToObj(i->new String(Character.toChars(i)))
            .collect(Collectors.joining());
}

более эффективным может быть:

public String method(String str) {
    return str.isEmpty()? "": str.substring(0, str.length() - Character.charCount(str.codePointBefore(str.length())));
}

мы можем использовать подстроку. Вот пример,

public class RemoveStringChar 
{
    public static void main(String[] args) 
    {   
        String strGiven = "Java";
        System.out.println("Before removing string character - " + strGiven);
        System.out.println("After removing string character - " + removeCharacter(strGiven, 3));
    }

    public static String removeCharacter(String strRemove, int position)
    {   
        return strRemove.substring(0, position) + strRemove.substring(position + 1);    
    }
}

 // creating StringBuilder
 StringBuilder builder = new StringBuilder(requestString);
 // removing last character from String
 builder.deleteCharAt(requestString.length() - 1);

Это единственный способ удалить последний символ в строке:

Scanner in = new Scanner(System.in);
String s = in.nextLine();
char array[] = s.toCharArray();
int l = array.length;
for (int i = 0; i < l-1; i++) {
    System.out.print(array[i]);
}