package gnu.dtools.ritopt;
/**
* Utility.java
*
* Version:
* $Id: Utility.java 1318 2005-11-08 04:53:29Z mortenalver $
*/
/**
* This class provides static utility members for some basic string operations.
*
* <hr>
*
* <pre>
* Copyright (C) Damian Ryan Eads, 2001. All Rights Reserved.
*
* ritopt is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
* ritopt 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 General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with ritopt; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
* </pre>
*
* @author Damian Eads
*/
public class Utility {
/**
* Returns true if any of the characters in the list appear in the
* check string passed.
*
* @param check The string to check.
* @param list The list of valid characters.
*
* @return true if the criteria of this method is satisfied.
*/
public static boolean contains( String check, String list ) {
for ( int n = 0; n < list.length(); n++ ) {
if ( check.indexOf( list.substring( n, n + 1 ) ) != -1 )
return true;
}
return false;
}
/**
* Returns the number of occurances the character specification
* appears in the check string passed.
*
* @param check The string to check.
* @param spec The character specification.
*
* @return the number of occurances of the character specification.
*/
public static int count( String check, char spec ) {
int sum = 0;
for ( int n = 0; n < check.length(); n++ ) {
if ( check.charAt( 0 ) == spec ) sum++;
}
return sum;
}
/**
* Returns true if any of the characters in the list are equal to
* the check character.
*
* @param check The character to check.
* @param list The list of valid characters.
*
* @return true if any of the characters in the list equal the check
* character.
*/
public static boolean contains( char check, String list ) {
return contains( "" + check, list );
}
/**
* Returns true if the string only contains letters in the phonetic
* alphabet.
*
* @param check The string to check.
*
* @return If this method's criteria is matched.
*/
public static boolean isAlpha( String check ) {
boolean retval = false;
for ( int n = 0; n < check.length(); n++ ) {
retval = isAlphaLower( check.charAt( n ) ) ||
isAlphaUpper( check.charAt( n ) );
}
return retval;
}
/**
* Returns true if the string only contains lower case letters in the
* phonetic alphabet.
*
* @param check The string to check.
*
* @return If this method's criteria is matched.
*/
public static boolean isAlphaLower( String check ) {
boolean retval = false;
for ( int n = 0; n < check.length(); n++ ) {
retval = isAlphaLower( check.charAt( n ) );
}
return retval;
}
/**
* Returns true if the string only contains upper case letters in the
* phonetic alphabet.
*
* @param check The string to check.
*
* @return If this method's criteria is matched.
*/
public static boolean isAlphaUpper( String check ) {
boolean retval = false;
for ( int n = 0; n < check.length(); n++ ) {
retval = isAlphaUpper( check.charAt( n ) );
}
return retval;
}
/**
* Returns true if the character is a letter in the phonetic alphabetic.
*
* @param check The character to check.
*
* @return true if this method's criteria is matched.
*/
public static boolean isAlpha( char check ) {
return isAlphaLower( check ) || isAlphaUpper( check );
}
/**
* Returns true if the character is a lower case letter in the
* phonetic alphabetic.
*
* @param check The character to check.
*
* @return true if this method's criteria is matched.
*/
public static boolean isAlphaLower( char check ) {
return check >= 'a' && check <= 'z';
}
/**
* Returns true if the character is a upper case letter in the
* phonetic alphabetic.
*
* @param check The character to check.
*
* @return true if this method's criteria is matched.
*/
public static boolean isAlphaUpper( char check ) {
return check >= 'A' && check <= 'Z';
}
/**
* Returns true if the character is a letter in the phonetic alphabetic
* or is a decimal number.
*
* @param check The character to check.
*
* @return true if this method's criteria is matched.
*/
public static boolean isAlphaNumeric( char check ) {
return isAlpha( check ) || isNumeric( check );
}
/**
* Returns true if the character is a decimal number.
*
* @param check The character to check.
*
* @return true if this method's criteria is matched.
*/
public static boolean isNumeric( char check ) {
return check >= '0' && check <= '9';
}
/**
* Returns a string with no more and no less than <em>n</em> characters
* where n is the length. If the string passed is less than this length,
* an appropriate number of spaces is concatenated. If the string is
* longer than the length passed, a substring of the length passed
* is returned.
*
* @param s The string to expand.
* @param length The required length.
*
* @return The expanded string.
*/
public static String expandString( String s, int length ) {
if ( s.length() > length ) s = s.substring( 0, length );
return s + getSpaces( length - s.length() );
}
/**
* Returns a string containing the number of spaces passed as an
* argument.
*
* @param count The number of spaces in the string returned.
*
* @return a string containing the number of spaces passed.
*/
public static String getSpaces( int count ) {
return repeat( ' ', count );
}
/**
* Returns a string with a character repeated based on a count passed.
*
* @param c The character to repeat.
* @param count The number of times to repeat the character.
*/
public static String repeat( char c, int count ) {
StringBuffer retval = new StringBuffer( count );
for ( int n = 0; n < count; n++ ) {
retval.append( c );
}
return retval.toString();
}
/**
* Trim spaces off the left side of this string.
*
* @param s The string to trim.
*
* @return The trimmed string.
*/
public static String ltrim( String s ) {
StringBuffer buf = new StringBuffer( s );
for ( int n = 0; n < buf.length() && buf.charAt( n ) == ' '; ) {
buf.delete( 0, 1 );
}
return buf.toString();
}
/**
* Trim spaces off the right side of this string.
*
* @param s The string to trim.
*
* @return The trimmed string.
*/
public static String rtrim( String s ) {
StringBuffer buf = new StringBuffer( s );
for ( int k = buf.length() - 1; k >= 0 && buf.charAt( k ) == ' ';
k = buf.length() - 1 ) {
buf.delete( buf.length() - 1, buf.length() );
}
return buf.toString();
}
/**
* Trim spaces off both sides of this string.
*
* @param s The string to trim.
*
* @return The trimmed string.
*/
public static String trim( String s ) {
return ltrim( rtrim( s ) );
}
/**
* Takes a line (presumably from a file) and removes a comment if
* one exists. If the comment character is enclosed within a literal
* string defined by the delimiter passed, then the character is
* ignored.
*
* @param s The string to strip comments off.
* @param delim The string delimiter.
* @param comment The comment character.
*
* @return A string stripped of comments.
*/
public static String stripComments( String s, char delim, char comment ) {
String retval = s;
boolean q = false;
for ( int n = 0; n < s.length(); n++ ) {
if ( s.charAt( n ) == delim ) {
q = !q;
}
else if ( !q && s.charAt( n ) == comment ) {
retval = s.substring( 0, n );
}
}
return retval;
}
/**
* Returns a string with the passed string repeated based on the
* integer count passed.
*
* @param s The string to repeat.
* @param count The number of times to repeat the string.
*
* @return The repeated string.
*/
public static String repeat( String s, int count ) {
StringBuffer retval = new StringBuffer( s.length() * count );
for ( int n = 0; n < count; n++ ) {
retval.append( s );
}
return retval.toString();
}
}