一个Java的字符串变量,其值为
String path = "http://cdn.gs.com/new/downloads/Q22010MVR_PressRelease.pdf.null"
我想删除最后四个字符,即.null
。我可以使用哪种方法来分割字符串?我认为您想要删除最后五个字符('。','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 中最常用的类之一,所以没有理由不熟悉它。)
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"
path = path.substring(0, path.length() - 5);
我很惊讶地发现,截至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
异常。此外,在子字符串中,你无需自己计算字符数。path.substring(0,path.length() - 5)
(可能包含一个偏移错误;))
如果您想删除一些变量字符串:
path.substring(0,path.lastIndexOf('yoursubstringtoremove));
if (s.size > 5) s.reverse.substring(5).reverse
顺便说一下,这是Scala代码。在Java中可能需要括号才能正常工作。
StringBuilder
,并像上面一样将其反转,使用delete(0, 5)
删除前5个字符,然后再次反转。然后将其转换回字符串。 - Subaru Tashiro
String
类本身已经拥有所有所需的方法。只需输入path.
,花费2分钟查看代码提示即可。真正的习惯养成会在未来带来100倍的回报。 - Sergey Grinev.null
,而不是1。此外,该问题的顶部答案更好地解决了任何这些答案中的问题。 - Uyghur Lives Matter