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

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

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


当前回答

假设我的字符串总长度=24 我想把位置14后的最后一个字符切到结束,这意味着我想从14开始。 所以我应用下面的解决方案。

String date = "2019-07-31T22:00:00.000Z";
String result = date.substring(0, date.length() - 14);

其他回答

这个众所周知的问题在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);
  }

从Java 8开始,你可以使用Optional来避免空指针异常,并使用函数式编程:

public String removeLastCharacter(String string) {
    return Optional.ofNullable(string)
        .filter(str -> !str.isEmpty() && !string.isBlank())
        .map(str -> str.substring(0, str.length() - 1))
        .orElse(""); // Should be another value that need if the {@param: string} is "null"
}

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

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

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

不要试图重新发明轮子,而其他人已经编写了库来执行字符串操作: org.apache.commons.lang3.StringUtils.chop ()

所描述的问题和提出的解决方案有时涉及到移除分隔器。如果这是你的情况,那么看看Apache Commons StringUtils,它有一个叫做removeEnd的方法,非常优雅。

例子:

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

会导致: "string 1|string 2|string 3"