code: public static boolean containsIgnoreCase(final CharSequence str, final CharSequence searchStr) {
          if (str == null || searchStr == null) {
              return false;
          }
          final int len = searchStr.length();
          final int max = str.length() - len;
          for (int i = 0; i <= max; i++) {
              if (CharSequenceUtils.regionMatches(str, true, i, searchStr, 0, len)) {
                  return true;
              }
          }
          return false;
      }
docs: <p>Checks if CharSequence contains a search CharSequence irrespective of case,
  handling {@code null}. Case-insensitivity is defined as by
  {@link String#equalsIgnoreCase(String)}.
  
  <p>A {@code null} CharSequence will return {@code false}.</p>
  
  <pre>
  StringUtils.containsIgnoreCase(null, *) = false
  StringUtils.containsIgnoreCase(*, null) = false
  StringUtils.containsIgnoreCase("", "") = true
  StringUtils.containsIgnoreCase("abc", "") = true
  StringUtils.containsIgnoreCase("abc", "a") = true
  StringUtils.containsIgnoreCase("abc", "z") = false
  StringUtils.containsIgnoreCase("abc", "A") = true
  StringUtils.containsIgnoreCase("abc", "Z") = false
  </pre>
  
  @param str  the CharSequence to check, may be null
  @param searchStr  the CharSequence to find, may be null
  @return true if the CharSequence contains the search CharSequence irrespective of
  case or false if not or {@code null} string input
  @since 3.0 Changed signature from containsIgnoreCase(String, String) to containsIgnoreCase(CharSequence, CharSequence)