Network Java Tutorial

/*
 * Copyright Aduna (http://www.aduna-software.com/) (c) 1997-2006.
 *
 * Licensed under the Aduna BSD-style license.
 */
public class Utils {
  /**
   * Tries to find a point in the supplied URI where this URI can be safely
   * split into a namespace part and a local name. According to the XML
   * specifications, a local name must start with a letter or underscore and
   * can be followed by zero or more 'NCName' characters.
   *
   * @param uri The URI to split.
   * @return The index of the first character of the local name, or
   * -1 if the URI can not be split into a namespace and local name.
   */
  public static int findURISplitIndex(String uri) {
    int uriLength = uri.length();
    // Search last character that is not an NCName character
    int i = uriLength - 1;
    while (i >= 0) {
      char c = uri.charAt(i);
      // Check for # and / characters explicitly as these
      // are used as the end of a namespace very frequently
      if (c == '#' || c == '/' || !XMLUtil.isNCNameChar(c)) {
        // Found it at index i
        break;
      }
      i--;
    }
    // Character after the just found non-NCName character could
    // be an NCName character, but not a letter or underscore.
    // Skip characters that are not letters or underscores.
    i++;
    while (i < uriLength) {
      char c = uri.charAt(i);
      if (c == '_' || XMLUtil.isLetter(c)) {
        break;
      }
      i++;
    }
    // Check that a legal split point has been found
    if (i == uriLength) {
      i = -1;
    }
    return i;
  }
}