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.
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;
}
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);
}
}
Puisque nous sommes 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 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"
public String removeLastChar(String s) {
if (s == null || s.length() == 0) {
return s;
}
return s.substring(0, s.length()-1);
}
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()
Utilisez ceci:
if(string.endsWith("x")) {
string= string.substring(0, string.length() - 1);
}
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.
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.
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
Rechercher dans la classe StringBuilder:
StringBuilder sb=new StringBuilder("toto,");
System.out.println(sb.deleteCharAt(sb.length()-1));//display "toto"
public String removeLastChar(String s) {
if (!Util.isEmpty(s)) {
s = s.substring(0, s.length()-1);
}
return s;
}
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;}
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
// 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;
}
// creating StringBuilder
StringBuilder builder = new StringBuilder(requestString);
// removing last character from String
builder.deleteCharAt(requestString.length() - 1);
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)
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
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);
}
il suffit de remplacer la condition de "si" comme ceci:
if(a.substring(a.length()-1).equals("x"))'
cela fera l'affaire pour vous.
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.
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.
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"
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);
}
}
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())));
}
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);
"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));
}