為了删除一些特殊情況的檢查代碼,我将要使用一個stab來使用這兩個版本的lastIndexOf,并希望使這個意圖更易讀。信用額度為
Justin ‘jinguy’ Nelson提供了這種方法的基礎:
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();
}
}
對我來說,這比特殊套管隐藏的檔案和不包含點的檔案更清晰。它也更清楚地看到我了解你的規範是什麼;像“删除最後一個點和其後的所有内容,假定它存在,而不是檔案名的第一個字元”。
請注意,此示例也意味着Strings作為輸入和輸出。由于大部分抽象需要File對象,是以如果輸入和輸出也是這樣,那麼它将會更加清晰。