001 package org.bukkit.util; 002 003 import java.util.Collection; 004 import org.apache.commons.lang.Validate; 005 006 public class StringUtil { 007 008 /** 009 * Copies all elements from the iterable collection of originals to the 010 * collection provided. 011 * 012 * @param token String to search for 013 * @param originals An iterable collection of strings to filter. 014 * @param collection The collection to add matches to 015 * @return the collection provided that would have the elements copied 016 * into 017 * @throws UnsupportedOperationException if the collection is immutable 018 * and originals contains a string which starts with the specified 019 * search string. 020 * @throws IllegalArgumentException if any parameter is is null 021 * @throws IllegalArgumentException if originals contains a null element. 022 * <b>Note: the collection may be modified before this is thrown</b> 023 */ 024 public static <T extends Collection<? super String>> T copyPartialMatches(final String token, final Iterable<String> originals, final T collection) throws UnsupportedOperationException, IllegalArgumentException { 025 Validate.notNull(token, "Search token cannot be null"); 026 Validate.notNull(collection, "Collection cannot be null"); 027 Validate.notNull(originals, "Originals cannot be null"); 028 029 for (String string : originals) { 030 if (startsWithIgnoreCase(string, token)) { 031 collection.add(string); 032 } 033 } 034 035 return collection; 036 } 037 038 /** 039 * This method uses a region to check case-insensitive equality. This 040 * means the internal array does not need to be copied like a 041 * toLowerCase() call would. 042 * 043 * @param string String to check 044 * @param prefix Prefix of string to compare 045 * @return true if provided string starts with, ignoring case, the prefix 046 * provided 047 * @throws NullPointerException if prefix is null 048 * @throws IllegalArgumentException if string is null 049 */ 050 public static boolean startsWithIgnoreCase(final String string, final String prefix) throws IllegalArgumentException, NullPointerException { 051 Validate.notNull(string, "Cannot check a null string for a match"); 052 if (string.length() < prefix.length()) { 053 return false; 054 } 055 return string.regionMatches(true, 0, prefix, 0, prefix.length()); 056 } 057 }