删除Java字符串变量的最后几个字符。

63

一个Java的字符串变量,其值为

String path = "http://cdn.gs.com/new/downloads/Q22010MVR_PressRelease.pdf.null"
我想删除最后四个字符,即.null。我可以使用哪种方法来分割字符串?

10
人啊,String类本身已经拥有所有所需的方法。只需输入path.,花费2分钟查看代码提示即可。真正的习惯养成会在未来带来100倍的回报。 - Sergey Grinev
6
.null有5个字符。 - Esben Skov Pedersen
可能是以下内容的重复:如何从字符串中删除最后一个字符? - Nateowami
1
@Nateowami 如果长度为5个字符,则为.null,而不是1。此外,该问题的顶部答案更好地解决了任何这些答案中的问题。 - Uyghur Lives Matter
可能是Java是按引用传递还是按值传递?的重复问题。 - Billal Begueradj
6个回答

143
我认为你想要删除最后五个字符('。','n','u','l','l'):

我认为您想要删除最后五个字符('。','n','u','l','l'):

path = path.substring(0, path.length() - 5);

注意需要使用返回值 - 字符串是不可变的,所以substring(和其他方法)不会改变现有字符串 - 它们返回一个具有适当数据的字符串的引用。

或者更安全一点:

if (path.endsWith(".null")) {
  path = path.substring(0, path.length() - 5);
}

不过,我会尝试从更高的角度来解决这个问题。我的猜测是你之所以得到 ".null" 是因为其他代码执行了类似下面这样的操作:

path = name + "." + extension;

如果 extension 为 null,那么我建议你进行条件判断,这样你就可以避免一开始就得到错误的数据。

(正如问题评论中所指出的,你真的应该查看一下String API。它是 Java 中最常用的类之一,所以没有理由不熟悉它。)


5
我会尽力解决更高层次的问题,这是我个人认为最正确的答案。 - Pieter De Bie

38
import org.apache.commons.lang3.StringUtils;

// path = "http://cdn.gs.com/new/downloads/Q22010MVR_PressRelease.pdf.null"
StringUtils.removeEnd(path, ".null");
// path = "http://cdn.gs.com/new/downloads/Q22010MVR_PressRelease.pdf"

7
path = path.substring(0, path.length() - 5);

6

我很惊讶地发现,截至2013年9月8日,所有其他答案都涉及计算子字符串".null"中字符的数量,或者在未找到子字符串时抛出StringIndexOutOfBoundsException异常。 或两者兼而有之 :(

我建议采用以下方法:

public class Main {

    public static void main(String[] args) {

        String path = "file.txt";
        String extension = ".doc";

        int position = path.lastIndexOf(extension);

        if (position!=-1)
            path = path.substring(0, position);
        else
            System.out.println("Extension: "+extension+" not found");

        System.out.println("Result: "+path);
    }

}

如果未找到子字符串,啥也不会发生,因为也没有需要截断的内容。你不会遇到StringIndexOutOfBoundsException异常。此外,在子字符串中,你无需自己计算字符数。

1
这确实是最好的答案,因为它可以适应任何后缀而不使用硬限制。 - n_b

4
如果您想删除最后5个字符,可以使用以下方法:
path.substring(0,path.length() - 5)

(可能包含一个偏移错误;))

如果您想删除一些变量字符串:

path.substring(0,path.lastIndexOf('yoursubstringtoremove));

(也可能包含偏移一个错误 ;))

1
另一种方式:
if (s.size > 5) s.reverse.substring(5).reverse

顺便说一下,这是Scala代码。在Java中可能需要括号才能正常工作。


对于Java版本,您必须基于目标字符串创建一个StringBuilder,并像上面一样将其反转,使用delete(0, 5)删除前5个字符,然后再次反转。然后将其转换回字符串。 - Subaru Tashiro

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