web-dev-qa-db-fra.com

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

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

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 identiques à la dernière lettre.

Par exemple, le mot est "admirateur"; après avoir exécuté la méthode, je suis "admie". Je veux qu'il rende la Parole admirée.

386
duaprog137

replace remplacera toutes les occurrences d'une lettre. Tout ce que vous avez à 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;
}
553
Gary Buyn

Pourquoi pas un seul paquebot?

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

202
Fahim Parkar

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

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

Le problème décrit et les solutions proposées concernent parfois la suppression des séparateurs. Si tel est votre cas, jetez un œil à Apache Commons StringUtils, qui dispose d’une méthode appelée removeEnd qui est très élégante.

Exemple:

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

Cela donnerait: "Chaîne 1 | chaîne 2 | chaîne 3"

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

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

27
membersound

Utilisez ceci:

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

    string= string.substring(0, string.length() - 1);
 }
17
Navaneeth
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 suis "admie". Je veux qu'il rende la Parole admirée.

Au cas où vous essayez de stem mots anglais

La création de tige est le processus permettant de réduire les mots infléchis (ou parfois dérivés) à leur forme racine, base ou racine, généralement une forme écrite.

...

Un stemmer pour l'anglais, par exemple, devrait identifier la chaîne "cats" (et éventuellement "catlike", "catty", etc.) comme étant basée sur la racine "cat", et "stemmer", "stemming", "stemmed" basé sur "tige". Un algorithme dérivé réduit les mots "pêche", "pêché", "poisson" et "pêcheur" à la racine du mot, "poisson".

Différence entre les noms de Lucene: EnglishStemmer, PorterStemmer, LovinsStemmer présente certaines options Java.

10
Mike Samuel

En ce qui concerne la lisibilité, je trouve cela le plus concis.

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 à partir de la fin de la chaîne.

9
Kasturi

supprime la dernière occurrence de 'xxx':

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

supprime la dernière occurrence de '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 faites attention aux caractères spéciaux

4

Rechercher dans la classe StringBuilder:

    StringBuilder sb=new StringBuilder("toto,");
    System.out.println(sb.deleteCharAt(sb.length()-1));//display "toto"
3
aeocom
public String removeLastChar(String s) {
    if (!Util.isEmpty(s)) {
        s = s.substring(0, s.length()-1);
    }
    return s;
}
3
Ganesa Vijayakumar

Une réponse unique (juste une alternative amusante - n'essayez pas cela à la maison, et les réponses déjà données)

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

Pourquoi ne pas utiliser la séquence escape ...!

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

La vie est beaucoup plus facile maintenant. XD! ~ Un one-liner lisible

2
Tilak Maddy
// 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
 // creating StringBuilder
 StringBuilder builder = new StringBuilder(requestString);
 // removing last character from String
 builder.deleteCharAt(requestString.length() - 1);
2
Bachan Joseph

Dans Kotlin, vous pouvez utiliser la méthode dropLast () de la classe string. Il supprimera le nombre donné de la chaîne.

val string1 = "Some Text"
string1.dropLast(1)
1
Mahavir Jain

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
Nadhu

La plupart des réponses ici ont oublié paires de substitution .

Par exemple, le personnage ???? (codepoint U + 1D56B) ne rentre pas dans un seul char, aussi, pour être représenté, il doit former une paire de substitution de deux caractères.

Si on applique simplement la réponse actuellement acceptée (en utilisant str.substring(0, str.length() - 1), on épisse la paire de substitution, ce qui conduit à des résultats inattendus.

Il convient également de vérifier si le dernier caractère est une paire de substitution:

public static String removeLastChar(String str) {
    Objects.requireNonNull(str, "The string should not be null");
    if (str.isEmpty()) {
        return str;
    }

    char lastChar = str.charAt(str.length() - 1);
    int cut = Character.isSurrogate(lastChar) ? 2 : 1;
    return str.substring(0, str.length() - cut);
}
1
MC Emperor

il suffit de remplacer la condition de "si" comme ceci:

if(a.substring(a.length()-1).equals("x"))'

cela fera l'affaire pour vous.

0
Syed Salman Hassan

si vous avez un caractère spécial comme; dans json, utilisez simplement String.replace (";", "") sinon vous devez réécrire tous les caractères de la chaîne moins le dernier.

0
MoadKey

J'ai dû écrire du code pour un problème similaire. Une façon dont j'ai pu résoudre le problème a utilisé une méthode de codage récursive.

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 de récursivité, alors j'espère pouvoir vous aider ou aider quelqu'un qui a le même problème.

0
Jacob Mehnert

Comment faire le caractère dans la récursion à 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
simon francis

Nous pouvons utiliser une sous-chaîne. 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
Shiva

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

Utiliser des flux:

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

Plus efficace peut-être:

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

Supposons que la longueur totale de ma chaîne = 24 Je veux couper le dernier caractère après la position 14 pour terminer, ce qui signifie que je veux que le début 14 soit là. J'applique donc la solution suivante.

String date = "2019-07-31T22:00:00.000Z";
String result = date.substring(0, date.length() - 14);
0
Avinash Khadsan
 "String name" = "String name".substring(0, ("String name".length() - 1));

En l'utilisant 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 commande if suivante 

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