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

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

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


当前回答

下面是一个适用于基本多语言平面(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())));
}

其他回答

如果你想在结尾删除特定的字符,你可以使用:

myString.removeSuffix("x")

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

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

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

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

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
}

kotlin检查

string.dropLast(1)

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

例子:

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

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