Comment supprimer le dernier caractère d'une chaîne de caractères?

je veux supprimer le dernier caractère d'une chaîne. J'ai essayé de le faire:

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;
    }
}

obtenir la longueur de la chaîne - 1 et remplacer la dernière lettre par rien (la supprimer), mais chaque fois que je lance le programme, il supprime les lettres du milieu qui sont les mêmes que la dernière lettre.

par exemple, le mot est" admirateur"; après avoir exécuté la méthode, je reçois " admie."Je veux qu'il revienne le mot admirer.

362
demandé sur Ankush soni 2011-09-16 03:16:03

24 réponses

replace remplace toutes les lettres. Tout ce que vous devez faire est d'utiliser 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;
}
527
répondu Gary Buyn 2017-06-11 22:32:35

pourquoi pas une seule doublure?

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

Code Complet

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

Démo

186
répondu Fahim Parkar 2017-06-11 22:31:01

puisque nous sommes sur un sujet, on peut aussi utiliser des expressions régulières

"aaabcd".replaceFirst(".$",""); //=> aaabc  
74
répondu iddqd 2013-08-27 08:25:54

le problème décrit et les solutions proposées se rapportent parfois à l'enlèvement des séparateurs. Si C'est votre cas, alors regardez Apache Commons StringUtils, il a une méthode appelée removeEnd qui est très élégante.

exemple:

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

se traduirait par: "chaîne 1 chaîne 2|chaîne 3"

56
répondu Mart135688 2017-05-24 07:29:52
public String removeLastChar(String s) {
    if (s == null || s.length() == 0) {
        return s;
    }
    return s.substring(0, s.length()-1);
}
43
répondu BobBobBob 2011-09-16 16:02:48

N'essayez pas de réinventer la roue, alors que d'autres ont déjà écrit des bibliothèques pour effectuer des manipulations de chaîne: org.apache.commons.lang3.StringUtils.chop()

25
répondu membersound 2017-05-24 07:29:36

utilisez ceci:

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

    string= string.substring(0, string.length() - 1);
 }
15
répondu Navaneeth 2014-05-09 06:45:27
if (str.endsWith("x")) {
  return str.substring(0, str.length() - 1);
}
return str;

par exemple, le mot est" admirateur"; après avoir exécuté la méthode, je reçois " admie."Je veux qu'il revienne le mot admirer.

Dans le cas où vous êtes en essayant de souches des mots anglais

est le procédé qui permet de réduire les mots infléchis (ou parfois dérivés) à leur forme de base, de base ou de racine-généralement sous forme de mots écrits.

...

Un analyseur morphologique pour l'anglais, par exemple, devrait identifier la chaîne "chats" (et éventuellement "à", "méchant", etc.), basé sur la racine "chat", et "stemmer", "radical", "étaient" fondé sur des "souches". Un algorithme de bourrage réduit les mots "pêche", "pêché", "poisson", et "pêcheur" au mot racine, "poisson".

Difference between Lucene stemmers: EnglishStemmer, PorterStemmer, LovinsStemmer décrit quelques options Java.

9
répondu Mike Samuel 2017-05-23 12:10:45

en ce qui concerne la lisibilité, je trouve que c'est la plus concise

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

les index négatifs peuvent être utilisés dans L'utilitaire StringUtils D'Apache. Tous les nombres négatifs sont traités de décalage à partir de la fin de la chaîne.

9
répondu Kasturi 2016-12-15 23:48:37

supprime la dernière occurrence du "xxx":

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

supprime la dernière occurrence du" xxx "si elle est la dernière:

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

vous pouvez remplacer le " xxx " sur ce que vous voulez, mais attention sur les caractères spéciaux

4
répondu Arkadiusz Cieśliński 2014-01-11 11:04:08
public String removeLastChar(String s) {
    if (!Util.isEmpty(s)) {
        s = s.substring(0, s.length()-1);
    }
    return s;
}
3
répondu Ganesa Vijayakumar 2013-12-13 07:19:43

Look à la Classe StringBuilder :

    StringBuilder sb=new StringBuilder("toto,");
    System.out.println(sb.deleteCharAt(sb.length()-1));//display "toto"
3
répondu aeocom 2015-07-10 09:13:20
// 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;
}
2
répondu Oleksandr Paldypanida 2015-10-30 08:12:59

Un one-liner réponse (juste un drôle alternative - n'essayez pas ceci à la maison, et de grandes réponses déjà donné):

public String removeLastChar(String s){return (s != null && s.length() != 0) ? s.substring(0, s.length() - 1): s;}
2
répondu Nick Louloudakis 2016-06-16 15:49:49

Pourquoi ne pas utiliser le séquence d'échappement ... !

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

la Vie est beaucoup plus facile maintenant . XD ! ~ Lisible one-liner

2
répondu Tilak Maddy 2016-12-02 11:43:43

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

sortie: test-ab

1
répondu Nadhu 2018-01-30 14:58:19

si vous avez des caractères spéciaux comme ; dans json utilisez simplement String.remplacer (";","") sinon vous devez réécrire tous les caractères dans string moins le dernier.

0
répondu MoadKey 2015-07-31 09:20:44
 "String name" = "String name".substring(0, ("String name".length() - 1));

Im utiliser ce dans mon code, c'est facile et simple. il ne fonctionne que lorsque la Chaîne est > 0. Je l'ai connecté à un bouton et à l'intérieur de la suivante si déclaration

if ("String name".length() > 0) {
    "String name" = "String name".substring(0, ("String name".length() - 1));
}
0
répondu Donoso 2017-07-05 17:18:23

j'ai dû coder wright pour un problème similaire. Une façon que j'ai pu résoudre il a utilisé une méthode récursive de codage.

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;
}

la plupart du code que j'ai vu sur ce sujet n'utilise pas la récursion donc j'espère pouvoir vous aider ou quelqu'un qui a le même problème.

0
répondu Jacob Mehnert 2017-11-08 03:04:07

Comment faire de l'omble chevalier dans la récursivité à la fin:

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;
    }

par exemple:

removeChar ("hello world, let's go!",'l') → "heo word, et's go!llll"
removeChar("you should not go",'o') → "yu shuld nt goooo"
0
répondu simon francis 2018-05-26 21:33:58

Voici une réponse qui fonctionne avec des codépoints en dehors du Plan multilingue de base (Java 8+).

utilisant les flux:

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

peut-être plus efficace:

public String method(String str) {
    return str.isEmpty()? "": str.substring(0, str.length() - Character.charCount(str.codePointBefore(str.length())));
}
0
répondu Patrick Parker 2018-06-08 21:17:18

on peut utiliser du substrat. Voici l'exemple,

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);    
    }
}
0
répondu Shiva 2018-06-28 08:49:43
 // creating StringBuilder
 StringBuilder builder = new StringBuilder(requestString);
 // removing last character from String
 builder.deleteCharAt(requestString.length() - 1);
0
répondu Bachan Joseph 2018-07-10 16:23:27

C'est le seul moyen de supprimer le dernier caractère de la chaîne:

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]);
}
-1
répondu alagu raja 2016-08-31 07:11:06