//获取文件路径的公共父节点
  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
要怎么实现???谢啦!!!

解决方案 »

  1.   

    先写个函数,如: 
    public String commonLeft(String a, String b);然后将List中第一个文件名取出来,放入:common
    接着循环List,执行:common = commonLeft(common, filename);
    如果common为空就可以提前 break;算法如上。
      

  2.   

    说一个比较笨的办法
    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));
    }
    }
      

  3.   


    因为这个List<File> 所以文件数是不确定的,不过还是谢谢你了
      

  4.   

    for example
    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;
    }
      

  5.   

    lca问题的简单版
    在线/离线 可以随便挑
    不过对于文件路径这种需要直接先根据File.separator
    split成数组
    再类似于归并比较就可以了