private void splitChineseName(Name name, String fullName) {
    StringTokenizer tokenizer = new StringTokenizer(fullName);
    while (tokenizer.hasMoreTokens()) {
      String token = tokenizer.nextToken();
      if (name.givenNames == null) {
        name.givenNames = token;
      } else if (name.familyName == null) {
        name.familyName = name.givenNames;
        name.givenNames = token;
      } else if (name.middleName == null) {
        name.middleName = name.givenNames;
        name.givenNames = token;
      } else {
        name.middleName = name.middleName + name.givenNames;
        name.givenNames = token;
      }
    }

    // If a single word parse that word up.
    if (name.givenNames != null && name.familyName == null && name.middleName == null) {
      int length = fullName.length();
      if (hasDoubleLastName(fullName).equals("")) {
        if (length == 2) {
          name.familyName = fullName.substring(0, 1);
          name.givenNames = fullName.substring(1);
        } else if (length == 3) {
          name.familyName = fullName.substring(0, 1);
          name.middleName = fullName.substring(1, 2);
          name.givenNames = fullName.substring(2, length);
        } else if (length >= 4) {
          name.familyName = fullName.substring(0, 2);
          name.middleName = fullName.substring(2, 3);
          name.givenNames = fullName.substring(3, length);
        }
      } else {
        if (length == 2) {
          name.givenNames = fullName;
        } else if (length == 3) {
          name.familyName = fullName.substring(0, 2);
          name.givenNames = fullName.substring(2, 3);
        } else if (length >= 4) {
          name.familyName = fullName.substring(0, 2);
          name.middleName = fullName.substring(2, 3);
          name.givenNames = fullName.substring(3, length);
        }
      }
    }
  }
  private void parseMiddleName(Name name, NameTokenizer tokens) {
    if (tokens.mStartPointer == tokens.mEndPointer) {
      return;
    }

    if ((tokens.mEndPointer - tokens.mStartPointer) > 1) {
      if ((tokens.mEndPointer - tokens.mStartPointer) == 2
          || !mConjuctions.contains(tokens.mTokens[tokens.mEndPointer - 2].toUpperCase())) {
        name.middleName = tokens.mTokens[tokens.mEndPointer - 1];
        if (tokens.hasDot(tokens.mEndPointer - 1)) {
          name.middleName += '.';
        }
        tokens.mEndPointer--;
      }
    }
  }