删除Java String变量的最后一个字符

Remove the last chars of the Java String variable

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

1
String path ="http://cdn.gs.com/new/downloads/Q22010MVR_PressRelease.pdf.null"

我想删除最后四个字符,即.null。我可以用哪种方法来分割。


我想您要删除最后五个字符("."、'N'、'U'、'L'、'L'):

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

请注意您需要如何使用返回值-字符串是不可变的,因此substring和其他方法不会更改现有字符串-它们返回对具有适当数据的新字符串的引用。

或者更安全一点:

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

但是,我会努力把问题解决得更高一些。我猜您只得到了".null",因为其他一些代码正在这样做:

1
path = name +"." + extension;

其中,extension为空。我会把它作为条件,这样你就不会首先得到坏数据。

(如问题注释中所述,您确实应该查看StringAPI。它是Java中最常用的类之一,所以没有理由不熟悉它。


1
2
3
4
5
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"


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

我很惊讶地发现,所有其他答案(截至2013年9月8日)要么涉及到计算子字符串".null"中的字符数,要么在未找到子字符串的情况下抛出StringIndexOutOfBoundsException。或者两者都有:(

我建议如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
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。此外,您不必自己计算子字符串中的字符。


如果要删除最后5个字符,可以使用:

1
path.substring(0,path.length() - 5)

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

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

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

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


另一种方式:

1
if (s.size > 5) s.reverse.substring(5).reverse

顺便说一句,这是scala代码。可能需要在Java中使用括号。