code: public static String removeEndIgnoreCase(final String str, final String removeStr) {
          if (N.isNullOrEmpty(str) || N.isNullOrEmpty(removeStr)) {
              return str;
          }
  
          if (endsWithIgnoreCase(str, removeStr)) {
              return str.substring(0, str.length() - removeStr.length());
          }
  
          return str;
      }
docs: <p>
  Case insensitive removal of a substring if it is at the end of a source
  string, otherwise returns the source string.
  </p>
  
  <p>
  A {@code null} source string will return {@code null}. An empty ("")
  source string will return the empty string. A {@code null} search string
  will return the source string.
  </p>
  
  <pre>
  N.removeEndIgnoreCase(null, *)      = null
  N.removeEndIgnoreCase("", *)        = ""
  N.removeEndIgnoreCase(*, null)      = *
  N.removeEndIgnoreCase("www.domain.com", ".com.")  = "www.domain.com"
  N.removeEndIgnoreCase("www.domain.com", ".com")   = "www.domain"
  N.removeEndIgnoreCase("www.domain.com", "domain") = "www.domain.com"
  N.removeEndIgnoreCase("abc", "")    = "abc"
  N.removeEndIgnoreCase("www.domain.com", ".COM") = "www.domain")
  N.removeEndIgnoreCase("www.domain.COM", ".com") = "www.domain")
  </pre>
  
  @param str
  the source String to search, may be null
  @param removeStr
  the String to search for (case insensitive) and remove, may be
  null
  @return the substring with the string removed if found, {@code null} if
  null String input
  @since 2.4