高分悬赏:Java语言怎么将两个绝对路径中相同的部分提取出来,得到共同的绝对路径

高分悬赏:Java语言怎么将两个绝对路径中相同的部分提取出来,得到共同的绝对路径

这个可以用字符串的比较活着正则表达式哦

public static void main(String[] args) throws IOException {

        String path1 = "D:\\\\var\\usr\\local\\file1.txt";
        String path2 = "/var/usr/local/file2.conf";

        String[] path1Arr = splitPath2List(path1);
        String[] path2Arr = splitPath2List(path2);

        List<String> comPathList = new ArrayList<>();
        for (int i=0; i<path1Arr.length; i++) {
            if (StringUtils.isEmpty(path1Arr[i])) {
                continue;
            }
            StringBuilder comPath = new StringBuilder();
            for (int j=0; j<path2Arr.length; j++) {
                if (path1Arr[i].equals(path2Arr[j])) {
                    comPath.append(path1Arr[i]);
                    comPath.append(File.separator);
                    i++;
                }
            }
            if (comPath.length() > 0) {
                comPathList.add(comPath.toString().substring(0, comPath.length()-1));
            }
        }

        System.out.println(comPathList);


    }

    private static String[] splitPath2List(String filePath) {
        if (filePath.indexOf('\\') > -1) {
            return filePath.split("\\\\");
        } else if (filePath.indexOf('/') > -1){
            return filePath.split("/");
        } else {
            return null;
        }
    }

绝对路径都是从盘符开始的,直接把两个字符串的字符一个一个按顺序截出来,对比就是了

string path1 = "c:\sdfa\fads\er";
string path2 = "c:\sdfa\fa\";
//取较字符串的长度用以遍历
int length = path1.length() > path2.length() ? path2.length() : path1.length();
//存储相同的字符
string result = "";
for(int i = 0; i < length; i ++){
        string str1 = path1.subString(i,i+1);
        string str2 = path2.subString(i,i+1);
        if(str1.equals(str2){ //如果相同就加起来,然后继续,否则退出
                result += "str1";
                continue;
        }
        break;
}
//将路径截取至最后一个分隔符即可
result = result.subString(0,resultlastIndexOf("\"));