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 Ssortingng method(Ssortingng str) { if (str.charAt(str.length()-1)=='x'){ str = str.replace(str.subssortingng(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 moyennes identiques à la dernière lettre.

Par exemple, le mot est “admirer”; après avoir exécuté la méthode, j’ai “admie”. Je veux qu’il retourne le mot admire.

replace remplacera toutes les instances d’une lettre. Tout ce que vous avez à faire est d’utiliser la subssortingng() :

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

Pourquoi pas un seul paquebot?

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

Code complet

 import java.util.*; import java.lang.*; public class Main { public static void main (Ssortingng[] args) throws java.lang.Exception { Ssortingng s1 = "Remove Last CharacterY"; Ssortingng s2 = "Remove Last Character2"; System.out.println("After removing s1==" + removeLastChar(s1) + "=="); System.out.println("After removing s2==" + removeLastChar(s2) + "=="); } private static Ssortingng removeLastChar(Ssortingng str) { return str.subssortingng(0, str.length() - 1); } } 

Démo

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

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

Le problème décrit et les solutions proposées concernent parfois le retrait des séparateurs. Si tel est votre cas, consultez Apache Commons SsortingngUtils, il a une méthode appelée removeEnd qui est très élégante.

Exemple:

 SsortingngUtils.removeEnd("ssortingng 1|ssortingng 2|ssortingng 3|", "|"); 

Entraînerait: “chaîne 1 | chaîne 2 | chaîne 3”

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

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

Utilisez ceci:

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

Par exemple, le mot est “admirer”; après avoir exécuté la méthode, j’ai “admie”. Je veux qu’il retourne le mot admire.

Au cas où vous essayez d’ endiguer les mots anglais

Stemming est le processus de réduction des mots infléchis (ou parfois dérivés) à leur forme de base, de racine ou de tige – 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 de réduction réduit les mots “pêche”, “pêche”, “poisson” et “pêcheur” au mot racine “poisson”.

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

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

 SsortingngUtils.subssortingng("ssortingng", 0, -1); 

Les index négatifs peuvent être utilisés dans l’utilitaire SsortingngUtils d’Apache. Tous les nombres négatifs sont traités du décalage depuis la fin de la chaîne.

supprime la dernière occurrence du ‘xxx’:

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

supprime la dernière occurrence du ‘xxx’ s’il est en dernier:

  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

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

Rechercher dans la classe SsortingngBuilder:

  SsortingngBuilder sb=new SsortingngBuilder("toto,"); System.out.println(sb.deleteCharAt(sb.length()-1));//display "toto" 
 // Remove n last characters // System.out.println(removeLast("Hello!!!333",3)); public Ssortingng removeLast(Ssortingng mes, int n) { return mes != null && !mes.isEmpty() && mes.length()>n ? mes.subssortingng(0, mes.length()-n): mes; } // Leave subssortingng before character/ssortingng // System.out.println(leaveBeforeChar("Hello!!!123", "1")); public Ssortingng leaveBeforeChar(Ssortingng mes, Ssortingng last) { return mes != null && !mes.isEmpty() && mes.lastIndexOf(last)!=-1 ? mes.subssortingng(0, mes.lastIndexOf(last)): mes; } 

Une réponse simple (juste une alternative amusante – n’essayez pas ceci à la maison, et de bonnes réponses ont déjà été données):

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

Pourquoi ne pas utiliser la séquence d’échappement …!

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

La vie est bien plus facile maintenant. XD! ~ Une doublure lisible

Java 8

 import java.util.Optional; public class Test { public static void main(Ssortingng[] args) throws InterruptedException { System.out.println(removeLastChar("test-abc")); } public static Ssortingng removeLastChar(Ssortingng s) { return Optional.ofNullable(s) .filter(str -> str.length() != 0) .map(str -> str.subssortingng(0, str.length() - 1)) .orElse(s); } } 

Sortie: test-ab

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

  "Ssortingng name" = "Ssortingng name".subssortingng(0, ("Ssortingng name".length() - 1)); 

En utilisant ceci dans mon code, c’est simple et facile. il ne fonctionne que lorsque la chaîne est> 0. Je l’ai connecté à un bouton et à l’intérieur de l’instruction if suivante

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

J’ai dû me battre pour un problème similaire. Une façon de résoudre le problème a été d’utiliser une méthode de codage récursive.

 static Ssortingng removeChar(Ssortingng 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écursivité, alors j'espère que je peux vous aider ou aider quelqu'un qui a le même problème.

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

 public static Ssortingng removeChar(Ssortingng word, char charToRemove) { Ssortingng char_toremove=Character.toSsortingng(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" 

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

Utiliser des stream:

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

Plus efficace peut-être:

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

Nous pouvons utiliser une sous-chaîne. Voici l’exemple,

 public class RemoveSsortingngChar { public static void main(Ssortingng[] args) { Ssortingng strGiven = "Java"; System.out.println("Before removing ssortingng character - " + strGiven); System.out.println("After removing ssortingng character - " + removeCharacter(strGiven, 3)); } public static Ssortingng removeCharacter(Ssortingng strRemove, int position) { return strRemove.subssortingng(0, position) + strRemove.subssortingng(position + 1); } } 
  // creating SsortingngBuilder SsortingngBuilder builder = new SsortingngBuilder(requestSsortingng); // removing last character from Ssortingng builder.deleteCharAt(requestSsortingng.length() - 1); 

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

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