Newer
Older
ultramine_bukkit / src / main / java / org / bukkit / util / StringUtil.java
@vlad20012 vlad20012 on 24 Feb 2017 2 KB initial
package org.bukkit.util;

import org.apache.commons.lang.Validate;

import java.util.Collection;

public class StringUtil
{

	/**
	 * Copies all elements from the iterable collection of originals to the
	 * collection provided.
	 *
	 * @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());
	}
}