Vreau pentru a elimina ultimul caracter dintr-un string. Am'am încercat a face acest lucru:
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;
}
}
Obtinerea lungimea string - 1 și înlocuind ultima scrisoare cu nimic (ștergerea), dar de fiecare dată când rulați programul, se șterge scrisori de mijloc, care sunt la fel ca ultima scrisoare.
De exemplu, cuvântul este "admirator"; dupa ce am rulat metoda, am "admie." vreau să se întoarcă la cuvântul admira.
"înlocuiți" va înlocui toate cazurile de o scrisoare. Tot ce trebuie să faceți este să utilizați subșir()
:
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;
}
De ce nu doar o linie?
private static String removeLastChar(String str) {
return str.substring(0, str.length() - 1);
}
Cod 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);
}
}
Problema descrisă și au propus soluții, uneori, se referă la eliminarea separatoare. Dacă acesta este cazul dvs., apoi au o privire la Apache Commons StringUtils, are o metoda numita removeEnd, care este foarte elegant.
Exemplu:
StringUtils.removeEnd("string 1|string 2|string 3|", "|");
Ar duce la: "string 1|string 2|string 3"
Don't să încerce să reinventeze roata, în timp ce alții deja au scris biblioteci pentru a efectua manipularea string:
org.apache.commons.lang3.StringUtils.chop()
if (str.endsWith("x")) {
return str.substring(0, str.length() - 1);
}
return str;
De exemplu, cuvântul este "admirator"; dupa ce am rulat metoda, am "admie." vreau să se întoarcă la cuvântul admira.
În cazul în care te're încercarea de a stem cuvinte în limba engleză
care Rezultă este procesul de reducere a flexionare (sau, uneori, derivate), cuvintele lor stem, de bază sau de rădăcină de formă—în general, un cuvânt scris de formă.
...
Un stemmer pentru limba engleză, de exemplu, ar trebui să identifice string "pisici" (și, eventual, "felin", "catty" etc.) ca bazează pe rădăcină "pisica", și "stemmer", "decurg", "provenit" ca bazează pe "stem". Un algoritm care decurg reduce cuvinte "de pescuit", "pescuit", "peste", și "f" de la rădăcina cuvântului, "peste".
https://stackoverflow.com/questions/5068790/difference-between-lucene-stemmers-englishstemmer-porterstemmer-lovinsstemmer prezintă unele Java opțiuni.
Cât lizibilitatea este în cauză, am găsi acest lucru să fie cel mai concis
StringUtils.substring("string", 0, -1);
Negativ indicii pot fi utilizate în Apache's StringUtils utilitate. Toate numerele negative sunt tratate de offset de la sfârșitul șirului.
În Kotlin puteți folosi dropLast metoda() din clasa string. Aceasta va scadea anumit număr din șir, returnează un nou șir
var string1 = "Some Text"
string1 = string1.dropLast(1)
elimină ultima apariție din 'xxx':
System.out.println("aaa xxx aaa xxx ".replaceAll("xxx([^xxx]*)$", "$1"));
elimină ultima apariție a 'xxx' dacă e ultima:
System.out.println("aaa xxx aaa ".replaceAll("xxx\\s*$", ""));
puteți înlocui 'xxx' pe ceea ce vrei, dar ai grija pe caractere speciale
Un one-liner răspuns (doar un amuzant alternative - nu încercați acest lucru la domiciliu, și de mare de răspunsuri dat deja):
public String removeLastChar(String s){return (s != null && s.length() != 0) ? s.substring(0, s.length() - 1): s;}
De ce nu folosi secvență de evadare ... !
System.out.println(str + '\b');
Viața este mult mai ușor acum . XD ! ~ A citit-o linie
// 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;
}
"String name" = "String name".substring(0, ("String name".length() - 1));
Am'm, folosind acest lucru în codul meu, l's ușor și simplu. funcționează doar în timp ce Șirul este > 0. L-am conectat la un buton și în următoarele dacă declarație
if ("String name".length() > 0) {
"String name" = "String name".substring(0, ("String name".length() - 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);
}
}
Ieșire : test-ab
Cele mai multe răspunsuri aici a uitat despre surogat perechi.
De exemplu, caracterul 𝕫 (codepoint U+1D56B) nu se încadrează într-o singur char
, astfel încât, în scopul de a fi reprezentat, acesta trebuie să formeze un surogat pereche de două caractere.
Dacă pur și simplu se aplică în prezent acceptat răspuns (folosind str.substring(0, str.lungime() - 1)
, unul imbinari surogat pereche, ceea ce duce la rezultate neașteptate.
Unul ar trebui să includă, de asemenea, o verifica dacă ultimul caracter este un surogat pereche:
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);
}