import Comparator;

/**
 * Compares two objects by considering their string representations.
 * Does case-insensitive comparison.  Particularly useful for
 * comparing strings, but can also be used for other objects.
 *
 * @author Samuel A. Rebelsky
 * @version 1.1 of October 1999
 */
public class StringComparator
  implements Comparator
{
  /**
   * Determines if the string reperesentation of the first object 
   * is the same as the string representation of the second object.
   * Pre: The two objects are initialized and can be converted to strings.
   * Post: Returns true if they are equal and false otherwise.
   */
  public boolean equals(Object first, Object second)
  {
    String firstString = first.toString().toLowerCase();
    String secondString = second.toString().toLowerCase();
    return firstString.equals(secondString);
  } // equals(Object,Object)

  /* Determines if the string representation of the first object
   * is less than the string representation of the second object.
   * One string is "less than" another iff letters 0 through i-1
   * of the two strings are the same and either (i) letter i of the
   * first string is less than letter i of the second string or (ii)
   * the first string has only i letters and the second string has more
   * than i letters.
   */
  public boolean lessThan(Object first, Object second)
  {
    String firstString = first.toString().toLowerCase();
    String secondString = second.toString().toLowerCase();
    // The compareTo operator returns a negative value if
    // the first string precedes the second.
    return firstString.compareTo(secondString) < 0;
  } // lessThan(Object,Object)
} // class StringComparator
