首页 > 解决方案 > 提取目录名称

问题描述

我只想提取最后一级目录名称。我哪里做错了?我的目录中只有 1 个路径,这有关系吗?

ArrayList<String> directoryNames = new ArrayList<>();
for(int i = 0; i < directories.size(); i++){

    int index = directories.get(i).lastIndexOf("/");
    String string = directories.get(i).substring(index);
    directoryNames.add(string);
 }

标签: java

解决方案


我只想提取最后一级目录名称。我哪里做错了?我的目录中只有 1 个路径,这有关系吗?

不,您的总字符串directories无关紧要。问题是以下代码:

int index = directories.get(i).lastIndexOf("/");
String string = directories.get(i).substring(index);

您没有发现目录不是有效路径的可能性。String.lastIndexOf如果未找到任何事件(来自文档),将返回 -1:

在任何一种情况下,如果该字符串中没有出现这样的字符,则返回 -1。

因此,通过将代码更新为以下内容来检查是否发生:

List<String> directoryNames = new ArrayList<>();

for(int i = 0; i < directories.size(); i++){

   // Instead of using "/", use File.separatorChar because separator char
   // is dependent with the system. 
   int index = directories.get(i).lastIndexOf(File.separatorChar);

   // check only for valid directory name.
   if(index >= 0) {
      // don't include the "/" as the name
      String lastLevel = directories.get(i).substring(index + 1);
      directoryNames.add(lastLevel);
   }

}

推荐阅读