小编典典
我将为此目的使用双参数版本的stab,lastIndexOf以删除一些特殊情况的检查代码,并希望使意图更具可读性。幸得贾斯汀“jinguy”尼尔森提供这种方法的基础:
public static String removeExtention(String filePath) {
// These first few lines the same as Justin's
File f = new File(filePath);
// if it's a directory, don't remove the extention
if (f.isDirectory()) return filePath;
String name = f.getName();
// Now we know it's a file - don't need to do any special hidden
// checking or contains() checking because of:
final int lastPeriodPos = name.lastIndexOf('.');
if (lastPeriodPos <= 0)
{
// No period after first character - return name as it was passed in
return filePath;
}
else
{
// Remove the last period and everything after it
File renamed = new File(f.getParent(), name.substring(0, lastPeriodPos));
return renamed.getPath();
}
}
对我来说,这比特殊格式的隐藏文件和不包含点的文件更清晰。它也使我更清楚地了解您的规格要求;类似于“删除最后一个点及其后的所有内容,并假设该点存在并且不是文件名的第一个字符”。
请注意,此示例还隐含了字符串作为输入和输出。由于大多数抽象都需要File对象,因此如果这些对象也同时是输入和输出,则会稍微清楚一点。
2020-10-09