+ public static String toPath(List<String> segments) {
+ // TODO checks
+ StringJoiner sj = new StringJoiner("/");
+ segments.forEach((s) -> sj.add(s));
+ return sj.toString();
+ }
+
+ public static List<String> toPathSegments(String path) {
+ List<String> res = new ArrayList<>();
+ if ("".equals(path) || ROOT_SLASH.equals(path))
+ return res;
+ collectPathSegments(path, res);
+ return res;
+ }
+
+ private static void collectPathSegments(String path, List<String> segments) {
+ String[] parent = getParentPath(path);
+ if ("".equals(parent[1])) // root
+ return;
+ segments.add(0, parent[1]);
+ if ("".equals(parent[0])) // end
+ return;
+ collectPathSegments(parent[0], segments);
+ }
+
+ public static void checkDoubleSlash(String path) {
+ if (path.contains(SLASH + "" + SLASH))
+ throw new IllegalArgumentException("Path " + path + " contains //");
+ }
+