Как удалить последний символ из строки?
Я хочу, чтобы удалить последний символ из строки. Я пробовал сделать это:
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;
}
}
получение длины строки-1 и замена последней буквы ничем (удаление ее), но каждый раз, когда я запускаю программу, она удаляет средние буквы, которые совпадают с последней буквой.
например, слово "поклонник"; после запуска метода я получаю " admie."Я хочу вернуть слову восхищаться.
24 ответов
replace
заменит все экземпляры письма. Все, что вам нужно сделать, это использовать 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;
}
почему не только один лайнер?
private static String removeLastChar(String str) {
return str.substring(0, str.length() - 1);
}
Код
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);
}
}
демо
Так как мы на тему, можно использовать регулярные выражения тоже
"aaabcd".replaceFirst(".$",""); //=> aaabc
описанная проблема и предлагаемые решения иногда связаны с удалением сепараторов. Если это ваш случай, то посмотрите на Apache Commons StringUtils, у него есть метод под названием removeEnd очень элегантный.
пример:
StringUtils.removeEnd("string 1|string 2|string 3|", "|");
в результате: "строка 1 / строка 2 / строка 3"
public String removeLastChar(String s) {
if (s == null || s.length() == 0) {
return s;
}
return s.substring(0, s.length()-1);
}
Не пытайтесь изобрести колесо, в то время как другие уже написали библиотеки для выполнения строковых манипуляций:
org.apache.commons.lang3.StringUtils.chop()
if (str.endsWith("x")) {
return str.substring(0, str.length() - 1);
}
return str;
например, слово "поклонник"; после того, как я запускаю метод, я получаю " admie."Я хочу вернуть слову восхищаться.
В случае, если вы пытаетесь stem английские слова
Stemming-это процесс сокращения измененных (или иногда производных) слов до их стволовой, базовой или корневой формы-обычно письменной формы слова.
...
стеммер для английского языка, например, должен определите строку " кошки "(и, возможно," кошачьи"," кошачьи " и т. д.) как на основе корня "cat", так и "stemmer", "stemming", "stemmed", как на основе "stem". Алгоритм стеммирования сводит слова "рыбалка", "выловленный", "рыба" и "рыбак"к корневому слову "рыба".
разница между Lucene stemmers: EnglishStemmer, PorterStemmer, LovinsStemmer описывает некоторые параметры Java.
что касается читаемости, я нахожу это самым кратким
StringUtils.substring("string", 0, -1);
отрицательные индексы можно использовать в утилите StringUtils Apache. Все отрицательные числа обрабатываются из смещения от конца строки.
удаляет последнее появление "xxx":
System.out.println("aaa xxx aaa xxx ".replaceAll("xxx([^xxx]*)$", ""));
удаляет последнее вхождение "xxx", если оно последнее:
System.out.println("aaa xxx aaa ".replaceAll("xxx\s*$", ""));
вы можете заменить "xxx" на то, что вы хотите, но следите за специальными символами
public String removeLastChar(String s) {
if (!Util.isEmpty(s)) {
s = s.substring(0, s.length()-1);
}
return s;
}
посмотрите на класс StringBuilder:
StringBuilder sb=new StringBuilder("toto,");
System.out.println(sb.deleteCharAt(sb.length()-1));//display "toto"
// 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;
}
однострочный ответ (просто веселая альтернатива - не пробуйте это дома, а отличные ответы уже даны):
public String removeLastChar(String s){return (s != null && s.length() != 0) ? s.substring(0, s.length() - 1): s;}
почему бы не использовать escape sequence ... !
System.out.println(str + '\b');
жизнь теперь намного проще . XD ! ~ Читаемый однострочный
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);
}
}
выход: test-ab
Если у вас есть специальный символ, как ; в json просто используйте строку.replace (";","") в противном случае вы должны переписать весь символ в строке минус последний.
"String name" = "String name".substring(0, ("String name".length() - 1));
Im, используя это в моем коде, это легко и просто. он работает только тогда, когда строка > 0. Я подключил его к кнопке и внутри следующего Если сообщении
if ("String name".length() > 0) {
"String name" = "String name".substring(0, ("String name".length() - 1));
}
мне пришлось написать код для аналогичной проблемы. Один из способов, которым я смог его решить, использовал рекурсивный метод кодирования.
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;
}
большая часть кода, который я видел в этой теме, не использует рекурсию, поэтому, надеюсь, я могу помочь вам или кому-то, у кого такая же проблема.
Как сделать символ в рекурсии в конце:
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;
}
например:
removeChar ("hello world, let's go!",'l') → "heo word, et's go!llll"
removeChar("you should not go",'o') → "yu shuld nt goooo"
вот ответ, который работает с кодовыми точками вне базовой многоязычной плоскости (Java 8+).
С использованием потоков:
public String method(String str) {
return str.codePoints()
.limit(str.codePoints().count() - 1)
.mapToObj(i->new String(Character.toChars(i)))
.collect(Collectors.joining());
}
более эффективным может быть:
public String method(String str) {
return str.isEmpty()? "": str.substring(0, str.length() - Character.charCount(str.codePointBefore(str.length())));
}
мы можем использовать подстроку. Вот пример,
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);
}
}
// creating StringBuilder
StringBuilder builder = new StringBuilder(requestString);
// removing last character from String
builder.deleteCharAt(requestString.length() - 1);
Это единственный способ удалить последний символ в строке:
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]);
}