//获取文件路径的公共父节点
public String getCommonRoot(List<File>files)
{
}
给出一系列的文件,获取这些文件公共的根路径,比如:
C:/COMMON/A/B/C/Test1.pdf
C:/COMMON/A/E/F/Test2.pdf
这两个文件的公共跟路径就是 :C:/COMMON/A/ ,以此类推。
如果文件没有公共部分,分那会null;
比如:C:/AA/BB/T.PDF 和 E:/BB/CC
要怎么实现???谢啦!!!
public String getCommonRoot(List<File>files)
{
}
给出一系列的文件,获取这些文件公共的根路径,比如:
C:/COMMON/A/B/C/Test1.pdf
C:/COMMON/A/E/F/Test2.pdf
这两个文件的公共跟路径就是 :C:/COMMON/A/ ,以此类推。
如果文件没有公共部分,分那会null;
比如:C:/AA/BB/T.PDF 和 E:/BB/CC
要怎么实现???谢啦!!!
public String commonLeft(String a, String b);然后将List中第一个文件名取出来,放入:common
接着循环List,执行:common = commonLeft(common, filename);
如果common为空就可以提前 break;算法如上。
class StringLeftSame
{
public static void main(String[] args)
{
String s1 = "C:/COMMON/A/B/C/Test1.pdf";
String s2 = "C:/COMMON/A/E/F/Test2.pdf"; int n=0;
for(int i=0;i<s1.length();i++) {
String t = s1.substring(0, i+1);
if(s2.indexOf(t) == 0) {
n++;
continue;
} else {
break;
}
} System.out.println(s1.substring(0, n));
}
}
因为这个List<File> 所以文件数是不确定的,不过还是谢谢你了
public String getCommonRoot(List<File>files) {
if (files.size()==0) return null;
String root = files.get(0).getAbsolutePath();
for (int i=1; i<files.size();) {
StringBuildre sb = new StringBuilder();
char[] c1 = root.toCharArray();
char[] c2 = files.get(i).getAbsolutePath().toCharArray();
for (int j=0; j<c1.length && j<c2.length; j++) {
if (c1[j]==c2[j]) {sb.append(c1[j])};
else {break};
}
if (sb.length() > 0) {root = sb.toString();}
else {root = null; break;}
}
return root;
}
在线/离线 可以随便挑
不过对于文件路径这种需要直接先根据File.separator
split成数组
再类似于归并比较就可以了