Java tutorial
/** * Copyright 2013 BlackLocus * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.blacklocus.jres.strings; import org.apache.commons.lang3.StringUtils; import java.net.URI; import java.net.URISyntaxException; public class JresPaths { /** * @return fragments each appended with '/' if not present, and concatenated together */ public static String slashed(String... fragments) { StringBuilder sb = new StringBuilder(); for (String fragment : fragments) { sb.append(StringUtils.isBlank(fragment) || fragment.endsWith("/") ? (fragment == null ? "" : fragment) : fragment + "/"); } return sb.toString(); } /** * @return fragments encoded as valid URI path sections, each appended with '/' if not present. <code>null</code>s * upgraded to empty strings. Appends nothing to blank strings (and nulls). Any leading slashes will be dropped. */ public static String slashedPath(String... fragments) { String slashed = slashed(fragments); try { // Encode (anything that needs to be) in the path. Surprisingly this works. String encodedPath = new URI(null, null, slashed, null).getRawPath(); // Strip leading slash. Omitting it is slightly more portable where URIs are being constructed. return encodedPath.startsWith("/") ? encodedPath.substring(1) : encodedPath; } catch (URISyntaxException e) { throw new RuntimeException(e); } } }