Here you can find the source of pathEquals(String path1, String path2)
Parameter | Description |
---|---|
path1 | First path for comparizon |
path2 | Second path for comparizon |
public static boolean pathEquals(String path1, String path2)
//package com.java2s; //License from project: Apache License import java.util.ArrayList; import java.util.Collection; import java.util.Iterator; import java.util.LinkedList; import java.util.List; public class Main { private static final String FOLDER_SEPARATOR = "/"; private static final String WINDOWS_FOLDER_SEPARATOR = "\\"; private static final String TOP_PATH = ".."; private static final String CURRENT_PATH = "."; /**//w w w. j a v a 2 s.c om * Compare two paths after normalization of them. * * @param path1 * First path for comparizon * @param path2 * Second path for comparizon * @return True if the two paths are equivalent after normalization */ public static boolean pathEquals(String path1, String path2) { return cleanPath(path1).equals(cleanPath(path2)); } /** * Normalize the path by suppressing sequences like "path/.." and inner * simple dots folders. * <p> * The result is convenient for path comparison. For other uses, notice that * Windows separators ("\") are replaced by simple dashes. * * @param path * the original path * @return the normalized path */ public static String cleanPath(String path) { String pathToUse = replaceAll(path, WINDOWS_FOLDER_SEPARATOR, FOLDER_SEPARATOR); String[] pathArray = delimitedListToStringArray(pathToUse, FOLDER_SEPARATOR); List pathElements = new LinkedList(); int tops = 0; for (int i = pathArray.length - 1; i >= 0; i--) { if (CURRENT_PATH.equals(pathArray[i])) { // do nothing } else if (TOP_PATH.equals(pathArray[i])) { tops++; } else { if (tops > 0) { tops--; } else { pathElements.add(0, pathArray[i]); } } } return collectionToDelimitedString(pathElements, FOLDER_SEPARATOR); } /** * Replace all occurences of a substring within a string with another * string. * * @param input * String to examine * @param oldPattern * String to replace * @param newPattern * String to insert * @return a String with the replacements */ public static String replaceAll(String input, String oldPattern, String newPattern) { if (input == null) { return null; } if (oldPattern == null || newPattern == null) { return input; } StringBuffer sbuf = new StringBuffer(); // output StringBuffer we'll build up int pos = 0; // our position in the old string int index = input.indexOf(oldPattern); // the index of an occurrence we've found, or -1 int patLen = oldPattern.length(); while (index >= 0) { sbuf.append(input.substring(pos, index)); sbuf.append(newPattern); pos = index + patLen; index = input.indexOf(oldPattern, pos); } sbuf.append(input.substring(pos)); // remember to append any characters to the right of a match return sbuf.toString(); } /** * Take a String which is a delimited list and convert it to a String array. * <p> * A single delimiter can consists of more than one character: It will still * be considered as single delimiter string, rather than as bunch of * potential delimiter characters - in contrast to * <code>tokenizeToStringArray</code>. * * @param str * the input String * @param delimiter * the delimiter between elements (this is a single delimiter, * rather than a bunch individual delimiter characters) * @return an array of the tokens in the list * @see #tokenizeToStringArray */ public static String[] delimitedListToStringArray(String str, String delimiter) { if (str == null) { return new String[0]; } if (delimiter == null) { return new String[] { str }; } List result = new ArrayList(); int pos = 0; int delPos = 0; while ((delPos = str.indexOf(delimiter, pos)) != -1) { result.add(str.substring(pos, delPos)); pos = delPos + delimiter.length(); } if (str.length() > 0 && pos <= str.length()) { // Add rest of String, but not in case of empty input. result.add(str.substring(pos)); } return (String[]) result.toArray(new String[result.size()]); } /** * Convenience method to return a Collection as a delimited (e.g. CSV) * String. E.g. useful for toString() implementations. * * @param coll * Collection to display * @param delim * delimiter to use (probably a ",") * @param prefix * string to start each element with * @param suffix * string to end each element with */ public static String collectionToDelimitedString(Collection coll, String delim, String prefix, String suffix) { if (coll == null) { return ""; } StringBuffer sb = new StringBuffer(); Iterator it = coll.iterator(); int i = 0; while (it.hasNext()) { if (i > 0) { sb.append(delim); } sb.append(prefix).append(it.next()).append(suffix); i++; } return sb.toString(); } /** * Convenience method to return a Collection as a delimited (e.g. CSV) * String. E.g. useful for toString() implementations. * * @param coll * Collection to display * @param delim * delimiter to use (probably a ",") */ public static String collectionToDelimitedString(Collection coll, String delim) { return collectionToDelimitedString(coll, delim, "", ""); } }