Esempio n. 1
0
  /**
   * @param email The user entered email address that you want to check for suggestions with
   * @return null, if no suggestions, or an EmailAddress object containing the suggestion
   */
  public EmailAddress suggest(String email) {

    EmailAddress emailParts = new EmailAddress(email);
    if (!emailParts.isValid()) return null;

    String closestDomain =
        this.findClosestString(
            emailParts.getDomain(),
            configuration.getDomains(),
            configuration.getDistanceAlgorithm(),
            configuration.getThreshold());

    if (closestDomain != null) {
      // we have a suggestion
      if (!emailParts.hasDomain(closestDomain)) {
        // if we have a suggestion different to the actual domain, return it
        return emailParts.emailAddressWithDifferentDomain(closestDomain);
      }
    } else {
      // we don't have a suggestion, check tld
      String closestTopLevelDomain =
          this.findClosestString(
              emailParts.getTLD(),
              configuration.getTopLevelDomains(),
              configuration.getDistanceAlgorithm(),
              configuration.getThreshold());
      if (emailParts.getDomain() != null
          && closestTopLevelDomain != null
          && !closestTopLevelDomain.equals(emailParts.getTLD())) {
        // return suggestion based off tld
        String domain = emailParts.getDomain();
        closestDomain =
            domain.substring(0, domain.lastIndexOf(emailParts.getTLD())) + closestTopLevelDomain;
        return emailParts.emailAddressWithDifferentDomain(closestDomain);
      }
    }

    // exact match, no match, or invalid email so no suggestion
    return null;
  }