package com.googlecode.totallylazy.io;
import com.googlecode.totallylazy.Sequences;
import com.googlecode.totallylazy.regex.Regex;
import java.util.ArrayDeque;
import java.util.Deque;
import static com.googlecode.totallylazy.regex.Regex.regex;
public class DotSegments {
private static final Regex segment = regex("/?([^/]+)");
public static String remove(String path) {
final Deque<CharSequence> segments = new ArrayDeque<CharSequence>();
segment.findMatches(path).replace(notMatched -> {
segments.add(notMatched);
return null;
}, match -> {
switch (match.group(1)) {
case ".":
return null;
case "..":
if (!segments.isEmpty()) segments.removeLast();
break;
default:
segments.add(match.group());
break;
}
return null;
});
return Sequences.toString(segments, "");
}
}