public int match_main(String text, String pattern, int loc) {
		// Check for null inputs.
		if (text == null || pattern == null) {
			throw new IllegalArgumentException("Null inputs. (match_main)");
		}

		loc = Math.max(0, Math.min(loc, text.length()));
		if (text.equals(pattern)) {
			// Shortcut (potentially not guaranteed by the algorithm)
			return 0;
		} else if (text.length() == 0) {
			// Nothing to match.
			return -1;
		} else if (loc + pattern.length() <= text.length()
				&& text.substring(loc, loc + pattern.length()).equals(pattern)) {
			// Perfect match at the perfect spot!  (Includes case of null pattern)
			return loc;
		} else {
			// Do a fuzzy compare.
			return match_bitap(text, pattern, loc);
		}
	}