java 版 path.join()

public String join(String... params) {
    List < String > list = new ArrayList < > ();
    for (String str: params) {
        if (str != null && str.trim().length() > 0) {
            list.add(str.trim());
        }
    }
    if (list.size() == 0) {
        return ".";
    }
    String prefix = list.get(0);
    String suffix = list.get(list.size() - 1);
    boolean ss = prefix.startsWith("/");
    boolean es = suffix.endsWith("/");
    StringBuilder sb = new StringBuilder();
    for (String str: list) {
        sb.append(str).append("/");
    }
    String[] pathItems = sb.toString().split("[/|\\\\]");
    list.clear();
    for (String str: pathItems) {
        if (str.trim().length() > 0) {
            list.add(str);
        }
    }
    List < String > bufs = new ArrayList < > ();
    if (ss) {
        bufs.add(0, "/");
    }
    for (String str: list) {
        switch (str) {
            case ".":
                break;
            case "..":
                if (bufs.size() < 2) {
                    if (ss) {
                        bufs.set(0, "/");
                    } else {
                        bufs.set(0, ".");
                    }
                } else {
                    bufs.remove(bufs.size() - 1);
                }
                break;
            default:
                bufs.add(str);
                break;
        }
    }
    if (es) {
        bufs.add("/");
    }
    sb = new StringBuilder();
    for (String str: bufs) {
        sb.append(str);
        if (!"/".equals(str)) {
            sb.append("/");
        }
    }
    sb.deleteCharAt(sb.length() - 1);
    return sb.toString();
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章