/FileExtraction/Java_unseen/Wind-Development_WindSpigot/WindSpigot-API/src/main/java/org/bukkit/util/StringUtil.java
package org.bukkit.util;

import java.util.Collection;

import org.apache.commons.lang.Validate;

public class StringUtil {

	/**
	 * Copies all elements from the iterable collection of originals to the
	 * collection provided.
	 *
	 * @param <T>        the collection of strings
	 * @param token      String to search for
	 * @param originals  An iterable collection of strings to filter.
	 * @param collection The collection to add matches to
	 * @return the collection provided that would have the elements copied into
	 * @throws UnsupportedOperationException if the collection is immutable and
	 *                                       originals contains a string which
	 *                                       starts with the specified search
	 *                                       string.
	 * @throws IllegalArgumentException      if any parameter is is null
	 * @throws IllegalArgumentException      if originals contains a null element.
	 *                                       <b>Note: the collection may be modified
	 *                                       before this is thrown</b>
	 */
	public static <T extends Collection<? super String>> T copyPartialMatches(final String token,
			final Iterable<String> originals, final T collection)
			throws UnsupportedOperationException, IllegalArgumentException {
		Validate.notNull(token, "Search token cannot be null");
		Validate.notNull(collection, "Collection cannot be null");
		Validate.notNull(originals, "Originals cannot be null");

		for (String string : originals) {
			if (startsWithIgnoreCase(string, token)) {
				collection.add(string);
			}
		}

		return collection;
	}

	/**
	 * This method uses a region to check case-insensitive equality. This means the
	 * internal array does not need to be copied like a toLowerCase() call would.
	 *
	 * @param string String to check
	 * @param prefix Prefix of string to compare
	 * @return true if provided string starts with, ignoring case, the prefix
	 *         provided
	 * @throws NullPointerException     if prefix is null
	 * @throws IllegalArgumentException if string is null
	 */
	public static boolean startsWithIgnoreCase(final String string, final String prefix)
			throws IllegalArgumentException, NullPointerException {
		Validate.notNull(string, "Cannot check a null string for a match");
		if (string.length() < prefix.length()) {
			return false;
		}
		return string.regionMatches(true, 0, prefix, 0, prefix.length());
	}
}
