如何从字符串中删除最后一个字符?

597

我想从字符串中删除最后一个字符。我尝试了以下方法:

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”。我希望它返回单词admire。

37个回答

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

我在我的代码中使用这个,它很容易和简单。 只有当字符串长度 > 0 时才起作用。 我将其连接到一个按钮,并放在以下 if 语句内部。

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

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

4

删除最后一个出现的“xxx”:

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

如果'xxx'是最后一个,就删除它的最后一次出现:

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

您可以将“xxx”替换为所需的内容,但要注意特殊字符。


4

请看 StringBuilder 类:

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

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

4

如何把一个简单的任务变得复杂?我的解决方案是:

public String removeLastChar(String s) {
    return s[0..-1]
}

或者
public String removeLastChar(String s) {
    if (s.length() > 0) {
        return s[0..-1]
    }
    return s
}

1
s[0..-1] 是 Java 吗? - Aldo Canepa
兄弟.. 这不是Java。 - Alexandros Kourtis

2
// 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;
}

2
一句幽默的替代回答(仅供娱乐,请勿在家中尝试,已有很好的答案):
public String removeLastChar(String s){return (s != null && s.length() != 0) ? s.substring(0, s.length() - 1): s;}

2
这里的大多数答案都忽略了代理对
例如,字符(代码点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);
}

在一个特殊情况下:这段代码是否会抛出IndexOutOfBoundsException?(例如,当没有字符在它之前时,Character.isSurrogate返回true,使得str.length()-cut为负数) - GPI
是的,这是可能的。无论如何它都是一个无效的字符串,但仍然可以实现,是的。然后应该用 Math.min(2, str.length()) 替换 2 - MC Emperor

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);
    }
}

输出:测试-AB

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接