Как удалить последний символ из строки?
Я хочу удалить последний символ из строки. Я пробовал сделать это:
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 и замена последней буквы ничем (удаление ее), но каждый раз, когда я запускаю программу, она удаляет средние буквы, которые совпадают с последней буквой.
Например, слово "admirer"; после запуска метода я получаю "admie". Я хочу, чтобы оно вернуло слово восхищаться.
Ответы
Ответ 1
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;
}
Ответ 2
Почему не только один лайнер?
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);
}
}
Ответ 3
Поскольку мы находимся в теме, можно также использовать регулярные выражения
"aaabcd".replaceFirst(".$",""); //=> aaabc
Ответ 4
Описанная проблема и предлагаемые решения иногда связаны с удалением сепараторов. Если это ваш случай, взгляните на Apache Commons StringUtils, у него есть метод removeEnd, который очень изящный.
Пример:
StringUtils.removeEnd("string 1|string 2|string 3|", "|");
приведет к:
"строка 1 | строка 2 | строка 3"
Ответ 5
public String removeLastChar(String s) {
if (s == null || s.length() == 0) {
return s;
}
return s.substring(0, s.length()-1);
}
Ответ 6
Не пытайтесь изобретать колесо, а другие уже писали библиотеки для выполнения строковых манипуляций:
org.apache.commons.lang3.StringUtils.chop()
Ответ 7
Используйте это:
if(string.endsWith("x")) {
string= string.substring(0, string.length() - 1);
}
Ответ 8
if (str.endsWith("x")) {
return str.substring(0, str.length() - 1);
}
return str;
Например, слово "admirer"; после запуска метода я получаю "admie". Я хочу, чтобы оно вернуло слово восхищаться.
Если вы пытаетесь stem Английские слова
Stemming - это процесс для сокращения искаженных (или иногда полученных) слов к их исходной, базовой или корневой форме - обычно это текстовая форма.
...
Например, стример для английского языка должен идентифицировать строку "кошки" (и, возможно, "catlike", "catty" и т.д.), основанные на корневой "cat" и "stemmer", "stemning", вытекает из "основы". Алгоритм сужения сводит слова "рыбалка" , "рыбалка" , "рыба" и "рыбалка" к корневому слову "рыба".
Разница между Lucene stemmers: EnglishStemmer, PorterStemmer, LovinsStemmer описывает некоторые варианты Java.
Ответ 9
Что касается читаемости, я считаю, что это наиболее краткий
StringUtils.substring("string", 0, -1);
Отрицательные индексы могут использоваться в утилите Apache StringUtils.
Все отрицательные числа обрабатываются со смещения от конца строки.
Ответ 10
удаляет последнее появление "xxx" :
System.out.println("aaa xxx aaa xxx ".replaceAll("xxx([^xxx]*)$", "$1"));
удаляет последнее вхождение "xxx" , если оно последнее:
System.out.println("aaa xxx aaa ".replaceAll("xxx\\s*$", ""));
вы можете заменить "xxx" на то, что хотите, но следить за специальными символами
Ответ 11
public String removeLastChar(String s) {
if (!Util.isEmpty(s)) {
s = s.substring(0, s.length()-1);
}
return s;
}
Ответ 12
Посмотрите на класс StringBuilder:
StringBuilder sb=new StringBuilder("toto,");
System.out.println(sb.deleteCharAt(sb.length()-1));//display "toto"
Ответ 13
// creating StringBuilder
StringBuilder builder = new StringBuilder(requestString);
// removing last character from String
builder.deleteCharAt(requestString.length() - 1);
Ответ 14
В Kotlin вы можете использовать метод dropLast() класса string. Он удалит указанное число из строки, вернет новую строку
var string1 = "Some Text"
string1 = string1.dropLast(1)
Ответ 15
Ответ на один лайнер (просто забавная альтернатива - не пробуйте это у себя дома, и большие ответы уже даны):
public String removeLastChar(String s){return (s != null && s.length() != 0) ? s.substring(0, s.length() - 1): s;}
Ответ 16
// 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;
}
Ответ 17
Почему бы не использовать escape-последовательность...!
System.out.println(str + '\b');
Теперь жизнь намного проще. XD! ~ Читаемый однострочный
Ответ 18
"String name" = "String name".substring(0, ("String name".length() - 1));
Я использую это в своем коде, это легко и просто. он работает только тогда, когда строка> 0. Я подключен к кнопке и внутри следующего оператора if
if ("String name".length() > 0) {
"String name" = "String name".substring(0, ("String name".length() - 1));
}
Ответ 19
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
Ответ 20
Большинство ответов здесь забыли о суррогатных парах.
Например, символ 𝕫 (кодовая точка U + 1D56B) не помещается в один char
, поэтому для того, чтобы его можно было представить, он должен образовать суррогатную пару из двух символов.
Если кто-то просто применяет принятый в настоящее время ответ (используя str.substring(0, str.length() - 1)
, он соединяет суррогатную пару, что приводит к неожиданным результатам.
Также следует включить проверку, является ли последний символ суррогатной парой:
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);
}
Ответ 21
если у вас есть специальный символ; в json просто используйте String.replace( ";", ""), иначе вы должны переписать весь символ в строке минус последний.
Ответ 22
Мне пришлось вызывать код для аналогичной проблемы. Один из способов, которым я смог его решить, использовал рекурсивный метод кодирования.
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;
}
Большая часть кода, который я видел по этой теме, не использует рекурсию, поэтому, надеюсь, я могу помочь вам или кому-то, у кого такая же проблема.
Ответ 23
Как сделать символ в рекурсии в конце:
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 go!",'l') → "heo word, et go!llll"
removeChar("you should not go",'o') → "yu shuld nt goooo"
Ответ 24
Здесь ответ, который работает с кодовыми точками вне Базовой многоязычной плоскости (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())));
}
Ответ 25
Мы можем использовать подстроку. Вот пример,
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);
}
}
Ответ 26
просто замените условие "если" следующим образом:
if(a.substring(a.length()-1).equals("x"))'
это поможет тебе.
Ответ 27
Предположим, общая длина моей строки = 24
Я хочу вырезать последний символ после позиции 14 до конца, то есть хочу, чтобы начало 14 было там.
Поэтому я применяю следующее решение.
String date = "2019-07-31T22:00:00.000Z";
String result = date.substring(0, date.length() - 14);
Ответ 28
Это единственный способ удалить последний символ в строке:
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]);
}
Ответ 29
Вы можете сделать это здесьString = hereString.replace(hereString.chatAt(hereString.length() - 1), 'whitespeace');