private List<String> parse(String[] segments) { List<String> out = new ArrayList<>(); // parse recursive and skip empty parts parseNonEmptySegments(out, segments); // check for special trailing "/" condition and parameter construction String lastSegment = segments != null && segments.length > 0 ? segments[segments.length - 1] : null; if (lastSegment != null && (lastSegment.endsWith("/") || (lastSegment.isEmpty() && out.size() > 0))) { // push empty segment to end out.add(""); } return out; }
private void parseNonEmptySegments(List<String> out, String... elements) { // intercept empty lists if (elements == null || elements.length == 0) { return; } for (String element : elements) { String[] parts = element.split(PATH_DELIMITER); if (parts.length > 1) { parseNonEmptySegments(out, parts); } else if (parts.length == 1) { parseNonEmptySegment(out, parts[0]); } } }