Mega Code Archive

 
Categories / Java / Collections Data Structure
 

String search and reflection helper methods

/**  * The utillib library.  * More information is available at http://www.jinchess.com/.  * Copyright (C) 2002, 2003 Alexander Maryanovsky.  * All rights reserved.  *  * The utillib library is free software; you can redistribute  * it and/or modify it under the terms of the GNU Lesser General Public License  * as published by the Free Software Foundation; either version 2 of the  * License, or (at your option) any later version.  *  * The utillib library is distributed in the hope that it will  * be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU Lesser  * General Public License for more details.  *  * You should have received a copy of the GNU Lesser General Public License  * along with utillib library; if not, write to the Free Software  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307, USA  */ import java.util.Hashtable; import java.util.Enumeration; import java.util.NoSuchElementException; /**  * A collection of general utility methods.  */ public class Utilities{            /**    * A 0-length Object array.    */       public static final Object [] EMPTY_ARRAY = new Object[0];   /**    * A 0-length long array.    */       public static final long [] EMPTY_LONG_ARRAY = new long[0];   /**    * A 0-length int array.    */       public static final int [] EMPTY_INT_ARRAY = new int[0];         /**    * A 0-length short array.    */       public static final short [] EMPTY_SHORT_ARRAY = new short[0];      /**    * A 0-length byte array.    */       public static final byte [] EMPTY_BYTE_ARRAY = new byte[0];            /**    * A 0-length char array.    */       public static final char [] EMPTY_CHAR_ARRAY = new char[0];   /**    * A 0-length double array.    */       public static final double [] EMPTY_DOUBLE_ARRAY = new double[0];      /**    * A 0-length float array.    */       public static final float [] EMPTY_FLOAT_ARRAY = new float[0];   /**    * A 0-length String array.    */       public static final String [] EMPTY_STRING_ARRAY = new String[0];            /**    * An empty enumeration.    */      public static final Enumeration EMPTY_ENUM = new Enumeration(){     public boolean hasMoreElements(){return false;}     public Object nextElement(){throw new NoSuchElementException();}   };         /**    * Returns <code>true</code> if the two specified objects are the same.    * Returns <code>false</code> otherwise. To be considered the same, the two    * references must either both be null or invoking <code>equals</code> on one    * of them with the other must return <code>true</code>.    */   public static boolean areEqual(Object obj1, Object obj2){     return (obj1 == obj2) || (obj1 == null ? false : obj1.equals(obj2));   }   /**    * Maps the specified key to the specified value in the specified    * <code>Hashtable</code>. If the specified value is <code>null</code> any    * existing mapping of the specified key is removed from the    * <code>Hashtable</code>. The old value mapped to the specified key    * is returned, or <code>null</code> if no value was mapped to the key.    */   public static Object put(Hashtable table, Object key, Object value){     return value == null ? table.remove(key) : table.put(key, value);   }   /**    * Returns <code>true</code> if the specified object is an element of the    * specified array. The specified array may not be <code>null</code>. The    * specified object may be <code>null</code>, in which case this method will    * return <code>true</code> iff one of the indices in the array is empty     * (contains <code>null</code>).    */   public static boolean contains(Object [] array, Object item){     return (indexOf(array, item) != -1);   }   /**    * Returns the index of the first occurrance of specified object in the    * specified array, or -1 if the specified object is not an element of the    * specified array. The specified object may be <code>null</code> in which    * case the returned index will be the index of the first <code>null</code>    * in the array.    */   public static int indexOf(Object [] array, Object item){     if (array == null)       throw new IllegalArgumentException("The specified array may not be null");     for (int i = 0; i < array.length; i++)       if (areEqual(item, array[i]))         return i;     return -1;   }   /**    * Returns the index of the first occurrance of specified integer in the    * specified array, or -1 if the specified integer is not an element of the    * specified array.    */   public static int indexOf(int [] arr, int val){     if (arr == null)       throw new IllegalArgumentException("The specified array may not be null");     for (int i = 0; i < arr.length; i++)       if (arr[i] == val)         return i;     return -1;   }         /**    * Converts the specified array into a string by appending all its elements    * separated by a semicolon.    */   public static String arrayToString(Object [] arr){     StringBuffer buf = new StringBuffer();     for (int i = 0; i < arr.length; i++){       buf.append(arr[i]);       buf.append("; ");     }     if (arr.length > 0)       buf.setLength(buf.length() - 2); // get rid of the extra "; "     return buf.toString();   }   /**    * Converts the specified <code>Hashtable</code> into a string by putting    * each key and value on a separate line (separated by '\n') and an arrow    * (" -> ") between them.    */   public static String hashtableToString(Hashtable hashtable){     StringBuffer buf = new StringBuffer();     Enumeration keys = hashtable.keys();     while (keys.hasMoreElements()){       Object key = keys.nextElement();       Object value = hashtable.get(key);       buf.append(key.toString());       buf.append(" -> ");       buf.append(value.toString());       buf.append("\n");     }     return buf.toString();   }   /**    * Returns the maximum element in the specified integer array.    */   public static int max(int [] arr){     if (arr == null)       throw new IllegalArgumentException("The specified array may not be null");     if (arr.length == 0)       throw new IllegalArgumentException("The specified array must have at least one element");     int n = arr[0];     for (int i = 1; i < arr.length; i++)       if (arr[i] > n)         n = arr[i];     return n;   }   /**    * Returns a hash code for the specified double value.    */   public static int hashCode(double val){     return hashCode(Double.doubleToLongBits(val));   }   /**    * Returns a hash code for the specified long value.    */   public static int hashCode(long val){     return (int)(val ^ (val >>> 32));   }            /**    * Returns the name of the package of the specified class.    */      public static String getPackageName(Class c){     return getPackageName(c.getName());   }            /**    * Returns the name of the package of the class with the specified (full) name.    */      public static String getPackageName(String className){     int lastDotIndex = className.lastIndexOf(".");     return lastDotIndex == -1 ? "" : className.substring(0, lastDotIndex);   }            /**    * Returns the short name (excluding the package name) of the specified class.     */      public static String getClassName(Class c){     return getClassName(c.getName());   }            /**    * Returns the short name (excluding the package name) of the class with the    * specified fully qualified name.    */      public static String getClassName(String className){     int lastDotIndex = className.lastIndexOf(".");     return lastDotIndex == -1 ? className : className.substring(lastDotIndex + 1);   }          }