code: private static String removeDotSegments(String path) {
  		Deque<String> outputBuffer=new LinkedList<String>();
  		String input=path==null?EMPTY:path;
  		while(!input.isEmpty()) {
  			input=processInput(outputBuffer, input);
  		}
  		return assembleInOrder(outputBuffer);
  	}
docs: 5.2.4.  Remove Dot Segments
  
  The pseudocode also refers to a "remove_dot_segments" routine for
  interpreting and removing the special "." and ".." complete path
  segments from a referenced path.  This is done after the path is
  extracted from a reference, whether or not the path was relative, in
  order to remove any invalid or extraneous dot-segments prior to
  forming the target URI.  Although there are many ways to accomplish
  this removal process, we describe a simple method using two string
  buffers.
  
  1.  The input buffer is initialized with the now-appended path
  components and the output buffer is initialized to the empty
  string.
  
  2.  While the input buffer is not empty, loop as follows:
  
  A.  If the input buffer begins with a prefix of "../" or "./",
  then remove that prefix from the input buffer; otherwise,
  
  B.  if the input buffer begins with a prefix of "/./" or "/.",
  where "." is a complete path segment, then replace that
  prefix with "/" in the input buffer; otherwise,
  
  C.  if the input buffer begins with a prefix of "/../" or "/..",
  where ".." is a complete path segment, then replace that
  prefix with "/" in the input buffer and remove the last
  segment and its preceding "/" (if any) from the output
  buffer; otherwise,
  
  D.  if the input buffer consists only of "." or "..", then remove
  that from the input buffer; otherwise,
  
  E.  move the first path segment in the input buffer to the end of
  the output buffer, including the initial "/" character (if
  any) and any subsequent characters up to, but not including,
  the next "/" character or the end of the input buffer.
  
  3.  Finally, the output buffer is returned as the result of
  remove_dot_segments.