如何检查表示路径的字符串是否由 Java 中的 3 个子目录组成?
How to check if a string representing a path is composed by exactly 3 sub directories in Java?
进入 Java 应用程序 我遇到以下情况,我想请教您如何以巧妙的方式处理它。
我有这个集合(代表一些目录路径的字符串列表):
List<String> path = new ArrayList<String>();
在初始化阶段之后,此 path 列表包含类似于以下字符串对象的内容:
/KMS
/KMS/GEOTHERMAL
/KMS/HYDROELECTRIC
/KMS/SOLAR
/KMS/WIND
/KMS/WIND/BRAZIL
/KMS/WIND/CAMEX
/KMS/WIND/ITALY_EUROPE
/KMS/GEOTHERMAL/BRAZIL
........................
........................
........................
因此,单行表示 path 列表中的单个 String 对象。
我需要做以下操作:
如果字符串表示的路径少于三个子文件夹,则将其丢弃(例如,字符串为 /KMS 或 /KMS/HYDROELECTRIC必须舍弃。
如果字符串表示具有 3 个子文件夹的路径打印第三个子文件夹(例如,如果字符串类似于 /KMS/WIND/BRAZIL 打印 巴西).
显然我知道我必须迭代我的 path 列表来检查每个 String 对象,但是我怎样才能以一种聪明的方式进行先前的检查?
Tnx
您可以使用 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);
}
进入 Java 应用程序 我遇到以下情况,我想请教您如何以巧妙的方式处理它。
我有这个集合(代表一些目录路径的字符串列表):
List<String> path = new ArrayList<String>();
在初始化阶段之后,此 path 列表包含类似于以下字符串对象的内容:
/KMS
/KMS/GEOTHERMAL
/KMS/HYDROELECTRIC
/KMS/SOLAR
/KMS/WIND
/KMS/WIND/BRAZIL
/KMS/WIND/CAMEX
/KMS/WIND/ITALY_EUROPE
/KMS/GEOTHERMAL/BRAZIL
........................
........................
........................
因此,单行表示 path 列表中的单个 String 对象。
我需要做以下操作:
如果字符串表示的路径少于三个子文件夹,则将其丢弃(例如,字符串为 /KMS 或 /KMS/HYDROELECTRIC必须舍弃。
如果字符串表示具有 3 个子文件夹的路径打印第三个子文件夹(例如,如果字符串类似于 /KMS/WIND/BRAZIL 打印 巴西).
显然我知道我必须迭代我的 path 列表来检查每个 String 对象,但是我怎样才能以一种聪明的方式进行先前的检查?
Tnx
您可以使用 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);
}