/* This program 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 3 of
the License, or (at your option) any later version.
This program 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 this program. If not, see <http://www.gnu.org/licenses/>. */
package org.opentripplanner.util;
import java.util.List;
import java.util.ArrayList;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
public class IntUtils {
private static final Logger LOG = LoggerFactory.getLogger(IntUtils.class);
public static final String POINT_PREFIX = "POINT(";
/** does this string appear to be a coordinate of some sort */
public static boolean looksLikeCoordinate(String str)
{
if(str != null && (str.contains(POINT_PREFIX) || str.matches("[\\s]*[0-9\\-.]+[,\\s]+[0-9\\-.]+[\\s]*")))
return true;
return false;
}
public static final double roundDouble(double d, int places) {
return Math.round(d * Math.pow(10, places)) / Math.pow(10, places);
}
/** take a string of ints (eg: 1,2,3,4), and return a List of Integers */
static public List<Integer> asList(String str) {
return asList(str, ",");
}
/** take a string of ints (eg: 1[sep]2[sep]3[sep]4), and return a List of Integers */
static public List<Integer> asList(String str, String sep) {
List<Integer> retVal = new ArrayList<Integer>();
try {
String[] s = str.split(sep);
for (int i = 0; i < s.length; i++) {
Integer k = null;
try {
k = Integer.parseInt(s[i].trim());
} catch (Exception m) {
}
if (k != null)
retVal.add(k);
}
} catch (Exception e) {
}
return retVal;
}
static public Integer getZipFromString(String zipStr) {
Integer retVal = null;
try {
retVal = getIntegerFromSubString(zipStr, "-");
if (retVal == null) {
retVal = getIntegerFromString(zipStr);
}
} catch (Exception e) {
retVal = null;
}
return retVal;
}
public static short getShortFromString(String input) {
return (short) getIntFromString(input);
}
public static int getIntFromString(String input) {
int retVal = 0;
Integer n = getIntegerFromString(input);
if (n != null)
retVal = n.intValue();
else if (input != null)
retVal = input.hashCode();
return retVal;
}
public static Integer getIntegerFromString(String input) {
try {
return new Integer(input);
} catch (Exception e) {
try {
String in = input.replaceAll("\\D", "");
return new Integer(in);
} catch (Exception ee) {
return null;
}
}
}
public static Integer getIntegerFromString(String input, Integer def) {
Integer retVal = getIntegerFromString(input);
if (retVal == null)
retVal = def;
return retVal;
}
public static Integer getIntegerFromSubString(String input, int len) {
String tmp = input.substring(len);
return getIntegerFromString(tmp.trim());
}
/**
* expect an Integer between prefix and suffix
*
* eg: if is this is our string "Hi there #2112, how are you" then a call of
* getIntegerFromSubString("Hi there #2112, how are you", "#", ","); will return 2112
*
* note: if " " is specified, and there is no space from prefix to end of line, then the whole
* line is evaluated
*
* @param target
* @param prefix
* @param suffix
* @return
*/
public static Integer getIntegerFromSubString(String target, String prefix, String suffix) {
if (target == null)
return null;
Integer retVal = null;
try {
String tmp = target;
if (prefix != null && target.contains(prefix)) {
// get the line from the end of the prefix to end of line
int sz = prefix.length();
int in = target.indexOf(prefix);
tmp = target.substring(in + sz);
}
if (tmp != null && suffix != null && target.contains(suffix)) {
// get suffix endpoint -- and compensate for whitespace / end of line (same thing)
int suf = tmp.indexOf(suffix);
if (suf <= 0 && suffix.equals(" "))
suf = tmp.length();
tmp = tmp.substring(0, suf);
retVal = IntUtils.getIntegerFromString(tmp.trim());
}
} catch (Exception e) {
// not too big a deal if this dies...just return null, as if we couldn't find an int
// there
LOG.info("Not a big deal that we couldn't find an int from substring...going to return null", e);
retVal = null;
}
return retVal;
}
public static Integer getIntegerFromSubString(String target, String suffix) {
return getIntegerFromSubString(target, null, suffix);
}
public static Double getDoubleFromString(String input) {
try {
return new Double(input);
} catch (Exception e) {
LOG.info("Not a big deal...going to return null", e);
return null;
}
}
public static long getLongFromString(String input) {
return getLongFromString(input, -111);
}
public static long getLongFromString(String input, long def) {
try {
return new Long(input);
} catch (Exception e) {
LOG.info("Not a big deal...going to return default value", e);
return def;
}
}
}