Drill

ProblemsJava › patterns

Tidy up a file path

hardpatternsStacksStringsParsingJava

A storage service is handed paths with stray slashes and dot segments in them, and stores exactly one canonical form.

tidyPath(raw: string) → string

Java needs a compiler and Drill does not host one yet, so this page is the reference rather than an exercise: the problem, worked examples, and the solution in full. To type it out, the same problem runs in Python.

Solve it in Python →

Where you start

String tidyPath(String raw) {
    
}

Worked examples

CallResult
tidyPath("/home//user/")"/home/user"
tidyPath("/a/./b/../c")"/a/c"
tidyPath("/../")"/"
tidyPath("/")"/"

Hint

Split on the slash and push each real segment onto a stack; ".." pops instead. Joining the stack back up gives the answer.

Reference solution in Java
String tidyPath(String raw) {
    List<String> kept = new ArrayList<>();
    for (String part : raw.split("/")) {
        if (part.isEmpty() || part.equals(".")) continue;
        if (part.equals("..")) {
            if (!kept.isEmpty()) kept.remove(kept.size() - 1);
        } else {
            kept.add(part);
        }
    }
    return "/" + String.join("/", kept);
}

The same problem in another language

More patterns problems in Java