关于Java:如何从字符串中删除最后一个字符?

How to remove the last character from a string?

我想从字符串中删除最后一个字符。我试过这样做:

1
2
3
4
5
6
7
8
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"。我希望它返回"仰慕"这个词。


replace将替换字母的所有实例。您只需使用substring()

1
2
3
4
5
6
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;
}


为什么不只是一条航线?

1
2
3
private static String removeLastChar(String str) {
    return str.substring(0, str.length() - 1);
}

全码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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);
    }
}

演示


既然我们讨论的是一个主题,我们也可以使用正则表达式。

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


所描述的问题和建议的解决方案有时与拆卸分离器有关。如果这是您的情况,那么看看ApacheCommonsStringUtils,它有一个名为removeend的方法,非常优雅。

例子:

1
StringUtils.removeEnd("string 1|string 2|string 3|","|");

会导致:"字符串1字符串2字符串3"


1
2
3
4
5
6
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()


使用此:

1
2
3
4
 if(string.endsWith("x")) {

    string= string.substring(0, string.length() - 1);
 }

1
2
3
4
if (str.endsWith("x")) {
  return str.substring(0, str.length() - 1);
}
return str;

For example, the word is"admirer"; after I run the method, I get"admie." I want it to return the word admire.

如果你想阻止英语单词

Stemming is the process for reducing inflected (or sometimes derived) words to their stem, base or root form—generally a written word form.

...

A stemmer for English, for example, should identify the string"cats" (and possibly"catlike","catty" etc.) as based on the root"cat", and"stemmer","stemming","stemmed" as based on"stem". A stemming algorithm reduces the words"fishing","fished","fish", and"fisher" to the root word,"fish".

Lucene STMeMe: EnglishStemmer,PorterStemmer,LovinsStemmer概述了一些Java选项。


就可读性而言,我认为这是最简洁的

1
StringUtils.substring("string", 0, -1);

负索引可以在Apache的StringUtils实用程序中使用。从字符串结尾的偏移量开始处理所有负数。


删除"xxx"的最后一次出现:

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

删除"xxx"的最后一次出现(如果是最后一次出现的话):

1
    System.out.println("aaa xxx aaa ".replaceAll("xxx\\s*$",""));

你可以把"XXX"换成你想要的,但要注意特殊字符。


查找StringBuilder类:

1
2
    StringBuilder sb=new StringBuilder("toto,");
    System.out.println(sb.deleteCharAt(sb.length()-1));//display"toto"

1
2
3
4
 // creating StringBuilder
 StringBuilder builder = new StringBuilder(requestString);
 // removing last character from String
 builder.deleteCharAt(requestString.length() - 1);


1
2
3
4
5
6
public String removeLastChar(String s) {
    if (!Util.isEmpty(s)) {
        s = s.substring(0, s.length()-1);
    }
    return s;
}

一个简单的答案(只是一个有趣的选择-不要在家里尝试这个,已经给出了很好的答案):

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


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// 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;
}

为什么不使用转义序列…!

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

现在生活容易多了。除息的!~一个可读的一行程序


爪哇8

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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);
    }
}

输出:测试AB


1
"String name" ="String name".substring(0, ("String name".length() - 1));

我在我的代码中使用它,这很简单。它只在字符串大于0时工作。我把它连接到一个按钮上,并在下面的if语句中

1
2
3
if ("String name".length() > 0) {
   "String name" ="String name".substring(0, ("String name".length() - 1));
}

我不得不为类似的问题编写代码。有一种方法我可以用递归的编码方法来解决它。

1
2
3
4
5
6
7
8
9
10
11
12
13
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;
}

我在本主题中看到的大多数代码都不使用递归,所以希望我能帮助您或有相同问题的人。


如何在结尾处使递归中的字符:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
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;
    }

为例:

1
2
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 +)之外的代码点工作的答案。

使用流:

1
2
3
4
5
6
public String method(String str) {
    return str.codePoints()
            .limit(str.codePoints().count() - 1)
            .mapToObj(i->new String(Character.toChars(i)))
            .collect(Collectors.joining());
}

更有效的可能是:

1
2
3
public String method(String str) {
    return str.isEmpty()?"": str.substring(0, str.length() - Character.charCount(str.codePointBefore(str.length())));
}

我们可以使用子字符串。举个例子,

1
2
3
4
5
6
7
8
9
10
11
12
13
14
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);    
    }
}

在Kotlin中,可以使用String类的DropLast()方法。它将从字符串中删除给定的数字。

1
2
val string1 ="Some Text"
string1.dropLast(1)

如果在JSON中有类似的特殊字符,只需使用string.replace(";",),否则必须重写string中减去最后一个字符的所有字符。


你能做到我hereString=hereString.replace(hereString.chatat(hereString.length()-1),"whitespeace");


这是删除字符串中最后一个字符的一种方法:

1
2
3
4
5
6
7
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]);
}