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

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,并将最后一个字母替换为空(删除它),但每次我运行程序时,它都会删除与最后一个字母相同的中间字母。

例如,单词是“仰慕者”;在我运行这个方法之后,我得到了“钦佩”。我想让它回复“钦佩”这个词。


当前回答

这个众所周知的问题在Perl中通过chop()和chomp()完美地解决了。

这里有一个很长的答案:Java chop and chomp

代码如下:

  //removing trailing characters
  public static String chomp(String str, Character repl) {
    int ix = str.length();
    for (int i=ix-1; i >= 0; i-- ){
      if (str.charAt(i) != repl) break;
      ix = i;
    }
    return str.substring(0,ix);
  }
  
  //hardcut  
  public static String chop(String str) {
    return str.substring(0,str.length()-1);
  }

其他回答

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

"aaabcd".replaceFirst(".$",""); //=> aaabc  
public String removeLastChar(String s) {
    if (!Util.isEmpty(s)) {
        s = s.substring(0, s.length()-1);
    }
    return s;
}

简单的任务怎么变得复杂?我的解决方案是:

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

or

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

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

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

这个众所周知的问题在Perl中通过chop()和chomp()完美地解决了。

这里有一个很长的答案:Java chop and chomp

代码如下:

  //removing trailing characters
  public static String chomp(String str, Character repl) {
    int ix = str.length();
    for (int i=ix-1; i >= 0; i-- ){
      if (str.charAt(i) != repl) break;
      ix = i;
    }
    return str.substring(0,ix);
  }
  
  //hardcut  
  public static String chop(String str) {
    return str.substring(0,str.length()-1);
  }