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();
}
java 版 path.join()
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.