001 package com.croftsoft.core.text;
002
003 /*********************************************************************
004 * A collection of static methods to parse primitive types.
005 *
006 * @version
007 * $Id: ParseLib.java,v 1.2 2006/10/01 07:36:51 croft Exp $
008 * @since
009 * 1999-08-15
010 * @author
011 * <a href="https://www.croftsoft.com/">David Wallace Croft</a>
012 *********************************************************************/
013
014 public final class ParseLib
015 //////////////////////////////////////////////////////////////////////
016 //////////////////////////////////////////////////////////////////////
017 {
018
019 public static void main ( String [ ] args )
020 //////////////////////////////////////////////////////////////////////
021 {
022 System.out.println ( parseDouble ( null , 1968.0 ) );
023 System.out.println ( parseDouble ( "1968.0", 1974.0 ) );
024 System.out.println ( parseDouble ( "abcdef", 1968.0 ) );
025 }
026
027 //////////////////////////////////////////////////////////////////////
028 //////////////////////////////////////////////////////////////////////
029
030 /*********************************************************************
031 * Parses a boolean value from a String.
032 *
033 * <p>
034 * All leading and trailing whitespace is trimmed and all characters
035 * are converted to lower case before the comparison.
036 * </p>
037 *
038 * @param backup
039 *
040 * Default value to be returned is s is null or cannot be parsed.
041 *
042 * @return
043 *
044 * Returns false if s is "0", "f", "false", "n", "no" , or "off".
045 * Returns true if s is "1", "t", "true" , "y", "yes", or "on" .
046 * Otherwise returns backup value.
047 *********************************************************************/
048 public static boolean parseBoolean (
049 String s,
050 boolean backup )
051 //////////////////////////////////////////////////////////////////////
052 {
053 if ( s == null )
054 {
055 return backup;
056 }
057
058 s = s.trim ( ).toLowerCase ( );
059
060 if ( s.equals ( "0" )
061 || s.equals ( "f" )
062 || s.equals ( "false" )
063 || s.equals ( "n" )
064 || s.equals ( "no" )
065 || s.equals ( "off" ) )
066 {
067 return false;
068 }
069
070 if ( s.equals ( "1" )
071 || s.equals ( "t" )
072 || s.equals ( "true" )
073 || s.equals ( "y" )
074 || s.equals ( "yes" )
075 || s.equals ( "on" ) )
076 {
077 return true;
078 }
079
080 return backup;
081 }
082
083 /*********************************************************************
084 * Parses a double out of a String.
085 *
086 * @param backup
087 * Default value returned if unable to parse the String.
088 *********************************************************************/
089 public static double parseDouble ( String s, double backup )
090 //////////////////////////////////////////////////////////////////////
091 {
092 if ( s == null )
093 {
094 return backup;
095 }
096
097 try
098 {
099 return Double.valueOf ( s ).doubleValue ( );
100 }
101 catch ( NumberFormatException ex )
102 {
103 return backup;
104 }
105 }
106
107 /*********************************************************************
108 * Returns backup if s is null or a NumberFormatException occurs.
109 *********************************************************************/
110 public static int parseInt (
111 String s,
112 int backup )
113 //////////////////////////////////////////////////////////////////////
114 {
115 if ( s == null )
116 {
117 return backup;
118 }
119
120 s = s.trim ( );
121
122 if ( "".equals ( s ) )
123 {
124 return backup;
125 }
126
127 try
128 {
129 return Integer.parseInt ( s );
130 }
131 catch ( NumberFormatException e )
132 {
133 return backup;
134 }
135 }
136
137 /*********************************************************************
138 * Returns backup if s is null or a NumberFormatException occurs.
139 *********************************************************************/
140 public static long parseLong (
141 String s,
142 long backup )
143 //////////////////////////////////////////////////////////////////////
144 {
145 if ( s == null )
146 {
147 return backup;
148 }
149
150 try
151 {
152 return Long.parseLong ( s );
153 }
154 catch ( NumberFormatException e )
155 {
156 return backup;
157 }
158 }
159
160 /*********************************************************************
161 * Strips non-number characters out of the String.
162 *
163 * <p>
164 * Example: "$1,999.99 or best offer" ==> "1999.99"
165 * </p>
166 *********************************************************************/
167 public static String stripNonNumbers ( String s )
168 //////////////////////////////////////////////////////////////////////
169 {
170 if ( s == null )
171 {
172 return null;
173 }
174
175 StringBuffer stringBuffer = new StringBuffer ( );
176
177 int sLength = s.length ( );
178
179 for ( int i = 0; i < sLength; i++ )
180 {
181 char c = s.charAt ( i );
182
183 if ( c == '.'
184 || Character.isDigit ( c ) )
185 {
186 stringBuffer.append ( c );
187 }
188 }
189
190 String stripped = stringBuffer.toString ( );
191
192 if ( stripped.length ( ) < 1 )
193 {
194 return null;
195 }
196
197 return stripped;
198 }
199
200 //////////////////////////////////////////////////////////////////////
201 //////////////////////////////////////////////////////////////////////
202
203 private ParseLib ( ) { }
204
205 //////////////////////////////////////////////////////////////////////
206 //////////////////////////////////////////////////////////////////////
207 }