如何检查表示路径的字符串是否由Java中的3个子目录组成?

时间:2015-03-10 10:07:21

标签: java string algorithm split

进入Java应用程序我有以下情况,我想问你如何以聪明的方式处理它。

我有这个集合(表示某些目录路径的String列表):

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

在初始化阶段之后,此路径列表包含类似以下String对象的内容:

/KMS
/KMS/GEOTHERMAL
/KMS/HYDROELECTRIC
/KMS/SOLAR
/KMS/WIND
/KMS/WIND/BRAZIL
/KMS/WIND/CAMEX
/KMS/WIND/ITALY_EUROPE
/KMS/GEOTHERMAL/BRAZIL
........................
........................
........................

因此,单行代表路径列表中的单个String对象。

我需要做以下操作:

  • 如果字符串表示少于三个子文件夹的路径,则将其丢弃(例如,字符串为 / KMS / KMS / HYDROELECTRIC 必须放弃。

  • 如果字符串表示具有3个子文件夹的路径,则打印第三个子文件夹(例如,如果字符串类似于 / KMS / WIND / BRAZIL 打印 BRAZIL )。

显然我知道我必须遍历路径列表来检查每个String对象,但我怎样才能以智能方式进行上一次检查?

TNX

1 个答案:

答案 0 :(得分:4)

您可以使用Path::getNameCount(Java 7 +):

Paths.get(path).getNameCount() == 3

作为过滤列表的条件。

如果您只想从列表中删除无效路径,则只需编写(Java 8 +):

path.removeIf(s -> Paths.get(s).getNameCount() != 3);

使用Java 6或更早版本,您可能需要拆分字符串:

List<String> validPaths = ...;
for (String p : path) {
  //CAREFUL: == 4 for a 3-deep path, because the root "" counts for 1
  if (p.split("/").lentgh == 4) valiPaths.add(p);
}