有人请向我解释这段代码

时间:2012-01-21 14:09:04

标签: java filefilter

public String extension(File F)
{
    String FileName = F.getName();
    int LastIndex = FileName.lastIndexOf(DotSymbol);
    if(LastIndex > 0 && LastIndex <FileName.length() -1)
    {
    return FileName.substring(LastIndex+1);
    }else 
    {
        return "";

我不明白为什么我需要从if语句递减1并将1添加到子字符串。

5 个答案:

答案 0 :(得分:1)

如果未将作为参数传递的String作为FileName的子字符串找到,则lastIndexOf()方法返回-1。

所以,检查

if(LastIndex > 0 && LastIndex <FileName.length() -1)

对我没有任何意义。

我原本期望这样:

if (LastIndex != -1)
    return FileName.substring(LastIndex+1);
else 
    return "";

至于

return FileName.substring(LastIndex+1);

这取决于上下文:你想从FileName中提取什么?

如果您尝试提取文件扩展名,则需要+1来跳过字符串中找到的.字符的出现。

参考文献:String documentation

答案 1 :(得分:0)

删除1,因为lasiIndexOf返回从0开始的位置。

添加1以删除“。”扩展名。

答案 2 :(得分:0)

因为字符串索引从零开始,最后一个索引将是字符串-1

的长度

答案 3 :(得分:0)

您正在查找带点的字符串的最后位置。如果找到一个点,那么你将返回点后的子字符串(这将获得文件扩展名)。你减去一个,因为如果点是字符串的最后一个字符,你没有文件扩展名。你添加一个,因为你不想返回点,你想要返回点后面的内容(文件扩展名)。

答案 4 :(得分:0)

代码正在寻找.

第一次检查忽略启动的文件与.一样的* nix系统,表示特殊文件或目录。

substring()来电添加了1,以便在 .之后返回所有内容。

如果出现这个代码意味着返回文件扩展名。