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

在Java中,如何检查表示路径的字符串是否正好由3个子目录组成?,java,string,algorithm,split,Java,String,Algorithm,Split,在Java应用程序中,我遇到了以下情况,我想问您一个关于如何以智能方式处理它的建议 我有这个集合(表示某些目录路径的字符串列表): 因此,一行表示路径中的单个字符串对象 我需要执行以下操作: 如果一个字符串表示的路径包含少于三个子文件夹,则放弃该路径(例如,必须放弃/KMS或/KMS/strong>等字符串) 如果字符串表示具有3个子文件夹的路径,则打印第三个子文件夹(例如,如果字符串类似于/KMS/WIND/BRAZIL打印巴西) 显然,我知道我必须在我的路径列表上迭代以检查每个字符串对象

在Java应用程序中,我遇到了以下情况,我想问您一个关于如何以智能方式处理它的建议

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

因此,一行表示路径中的单个字符串对象

我需要执行以下操作:

  • 如果一个字符串表示的路径包含少于三个子文件夹,则放弃该路径(例如,必须放弃/KMS/KMS/strong>等字符串)

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

显然,我知道我必须在我的路径列表上迭代以检查每个字符串对象,但如何以智能的方式执行上一次检查

您可以使用(Java 7+):

作为筛选列表的条件

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

对于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);
}
列出有效路径=。。。;
for(字符串p:path){
//小心:对于3深的路径==4,因为根“”计数为1
如果(p.split(“/”).lentgh==4)valipath.add(p);
}
您可以使用(Java 7+):

作为筛选列表的条件

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

对于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);
}
列出有效路径=。。。;
for(字符串p:path){
//小心:对于3深的路径==4,因为根“”计数为1
如果(p.split(“/”).lentgh==4)valipath.add(p);
}

可能是天真的解决方案:在
/
上拆分,您必须剩下三个部分。
如果(path.get(i).split(“/”).length==3){//do your stuff}
可能重复@Jongware@SashaSalauyou,因为OP编写了子文件夹。您的建议只有在字符串以
'/'开头时才有效。
因此root是“父文件夹”。如果不是这样,则需要4个斜杠才能有3个子文件夹。可能是最简单的解决方案:在
/
上拆分,并且必须剩下三个部分。
If(path.get(i).split(“/”).length==3){//do your stuff}
可能重复@Jongware@SashaSalauyou,因为OP编写了子文件夹。只有当字符串以
“/”开头时,您的建议才会起作用。
因此root是“父文件夹”。如果不是这样,则需要4个斜杠才能有3个子文件夹。为清楚起见,此代码假定使用Java 8+。鉴于OP使用了
new ArrayList();
我不确定他是否使用了这样的版本。@OlivierGrégoire谢谢-我添加了一个note@assylias嗯,我在这个项目上使用Java1.6(我不能更改它).我尝试了您的解决方案,但无法解决路径上的get方法class@AndreaNobili那么您必须手动执行此操作并拆分字符串。请注意,手动执行此操作可能会在某些操作系统上产生问题。好的,如果您添加手动解决方案(拆分)我可以正式接受您的回答。另外,让我们看看发布的解决方案,该解决方案对使用Java 7\8的人非常有用:-)为了清楚起见,此代码假设使用Java 8+。假设OP使用
newarraylist()我不确定他是否使用了这样的版本。@OlivierGrégoire谢谢-我添加了一个note@assylias嗯,我在这个项目上使用Java1.6(我不能更改它)。我尝试了您的解决方案,但无法解决路径上的get方法class@AndreaNobili那你就得手动操作,然后把绳子分开,恐怕。。。请注意,手动操作可能会在某些操作系统上产生问题。好的,如果您添加手动解决方案(拆分),我可以正式接受您的答案。让我们也来看看发布的解决方案,它对使用Java 7\8的用户非常有用:-)
Paths.get(path).getNameCount() == 3
path.removeIf(s -> Paths.get(s).getNameCount() != 3);
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);
}