Java tutorial
//package com.java2s; /* * Copyright (C) 2010-2011 Geometer Plus <contact@geometerplus.com> * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 2 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; if not, write to the Free Software * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA * 02110-1301, USA. */ public class Main { public static String url(String baseUrl, String relativePath) { if (relativePath == null || relativePath.length() == 0) { return relativePath; } if (relativePath.contains("://") || relativePath.matches("(?s)^[a-zA-Z][a-zA-Z0-9+-.]*:.*$")) { // matches Non-relative URI; see rfc3986 return relativePath; } if (relativePath.charAt(0) == '/') { int index = baseUrl.indexOf("://"); index = baseUrl.indexOf("/", index + 3); if (index == -1) { return baseUrl + relativePath; } else { return baseUrl.substring(0, index) + relativePath; } } else { int index = baseUrl.lastIndexOf('/'); // FIXME: if (baseUrl.charAt(baseUrl.length() - 1) == '/') while (index > 0 && relativePath.startsWith("../")) { index = baseUrl.lastIndexOf('/', index - 1); relativePath = relativePath.substring(3); } return baseUrl.substring(0, index + 1) + relativePath; } } }