file = file.substring(index + 3);
break;
  protected void parseURL(URL u, String spec, int start, int limit)  {    String host = u.getHost();    int port = u.getPort();    String file = u.getFile();        /* TBD: The JDK 1.2 doc specifically says that limit is the position     * to stop parsing at and that it will be either the end of the string     * or the position of '#'; thus the doc infers that this method does     * not set the ref.     */    if (spec.regionMatches (start, "//", 0, 2))      {	int hostEnd;	int colon;	start += 2;	int slash = spec.indexOf('/', start);	if (slash >= 0) 	  hostEnd = slash;        else	  hostEnd = limit;	host = spec.substring (start, hostEnd);		// Look for optional port number.  It is valid for the non-port	// part of the host name to be null (e.g. a URL "http://:80").	// TBD: JDK 1.2 in this case sets host to null rather than "";	// this is undocumented and likely an unintended side effect in 1.2	// so we'll be simple here and stick with "". Note that	// "http://" or "http:///" produce a "" host in JDK 1.2.	if ((colon = host.indexOf(':')) >= 0)	  {	    try	      {		port = Integer.parseInt(host.substring(colon + 1));	      }	    catch (NumberFormatException e)	      {		; // Ignore invalid port values; port is already set to u's		  // port.	      }	    host = host.substring(0, colon);	  }	file = null;	start = hostEnd;      }     else if (host == null)       host = "";    if (start < limit && spec.charAt(start) == '/')       {	// This is an absolute path name; ignore any file context.	file = spec.substring(start, limit);      }     else if (file == null || file.length() <= 0)      {	// No file context available; just spec for file.	file = "/" + spec.substring(start, limit);      }    else if (start < limit)      {	// Context is available, but only override it if there is a new file.        // FIXME: unsure to what extent `/` and File.separatorChar	//        can mix in URLs.  Ignore File.separatorChar for now.	file = file.substring(0, file.lastIndexOf('/'))		+ "/" + spec.substring(start, limit);      }    int index;    // Replace "/./" with "/".  This probably isn't very efficient in    // the general case, but it's probably not bad most of the time.    while ((index = file.indexOf("/./")) >= 0)      file = file.substring(0, index) + file.substring(index + 2);    // Process "/../" correctly.  This probably isn't very efficient in    // the general case, but it's probably not bad most of the time.    while ((index = file.indexOf("/../")) >= 0)      {	// Strip of the previous directory - if it exists.	int previous = file.lastIndexOf('/', index - 1);	if (previous >= 0)	  file = file.substring(0, previous) + file.substring(index + 3);	else	  file = file.substring(index + 3);      }        u.set(u.getProtocol(), host, port, file, u.getRef());  }