/*******************************************************************************
* Copyright (c) 2010 Robert "Unlogic" Olofsson (unlogic@unlogic.se).
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the GNU Lesser Public License v3
* which accompanies this distribution, and is available at
* http://www.gnu.org/licenses/lgpl-3.0-standalone.html
******************************************************************************/
package se.unlogic.standardutils.numbers;
import java.lang.reflect.Field;
import java.lang.reflect.Type;
import java.text.DecimalFormat;
import java.text.DecimalFormatSymbols;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.Locale;
import java.util.regex.Pattern;
public class NumberUtils {
private static final Pattern NUMBER_PATTERN = Pattern.compile("\\D*");
public static boolean isLong(Double value) {
if (value != null) {
Long longValue = value.longValue();
Double doubleValue = longValue.doubleValue();
if (doubleValue.equals(value)) {
return true;
}
}
return false;
}
public static boolean isInt(String value) {
if (value != null) {
try {
Integer.parseInt(value);
return true;
} catch (NumberFormatException e) {}
}
return false;
}
public static boolean isLong(String value) {
if (value != null) {
try {
Long.parseLong(value);
return true;
} catch (NumberFormatException e) {}
}
return false;
}
public static boolean isFloat(String value) {
if (value != null) {
try {
Float.parseFloat(value);
return true;
} catch (NumberFormatException e) {}
}
return false;
}
public static boolean isDouble(String value) {
if (value != null) {
try {
Double.parseDouble(value);
return true;
} catch (NumberFormatException e) {}
}
return false;
}
public static boolean isNumber(String value) {
return isDouble(value) || isLong(value) ? true : false;
}
public static Integer toInt(String value) {
if (value != null) {
try {
return Integer.parseInt(value);
} catch (NumberFormatException e) {}
}
return null;
}
public static List<Integer> toInt(Collection<? extends Object> list, Field field) throws IllegalArgumentException, IllegalAccessException {
Type type = field.getType();
if (list != null && type.equals(Integer.class) || type.equals(int.class)) {
List<Integer> validIntegers = new ArrayList<Integer>();
for (Object object : list) {
Integer value = (Integer) field.get(object);
if (value != null) {
validIntegers.add(value);
}
}
return validIntegers;
}
return null;
}
public static ArrayList<Integer> toInt(Collection<String> values) {
if (values == null) {
return null;
} else {
ArrayList<Integer> validIntegers = new ArrayList<Integer>();
for (String value : values) {
if (value != null) {
Integer intValue = NumberUtils.toInt(value);
if (intValue != null) {
validIntegers.add(intValue);
}
}
}
if (validIntegers.isEmpty()) {
return null;
} else {
return validIntegers;
}
}
}
public static ArrayList<Integer> toInt(String[] values) {
if (values == null) {
return null;
} else {
ArrayList<Integer> validIntegers = new ArrayList<Integer>();
for (String value : values) {
if (value != null) {
Integer intValue = NumberUtils.toInt(value);
if (intValue != null) {
validIntegers.add(intValue);
}
}
}
if (validIntegers.isEmpty()) {
return null;
} else {
return validIntegers;
}
}
}
public static Long toLong(String value) {
if (value != null) {
try {
return Long.parseLong(value);
} catch (NumberFormatException e) {}
}
return null;
}
public static Float toFloat(String value) {
if (value != null) {
try {
return Float.parseFloat(value);
} catch (NumberFormatException e) {}
}
return null;
}
public static Double toDouble(String value) {
if (value != null) {
try {
return Double.parseDouble(value);
} catch (NumberFormatException e) {}
}
return null;
}
public static List<Double> toDouble(List<String> values) {
if (values == null) {
return null;
} else {
ArrayList<Double> validDoubles = new ArrayList<Double>();
for (String value : values) {
if (value != null) {
Double doubleValue = NumberUtils.toDouble(value);
if (doubleValue != null) {
validDoubles.add(doubleValue);
}
}
}
if (validDoubles.isEmpty()) {
return null;
} else {
return validDoubles;
}
}
}
public static List<Long> toLong(List<String> values) {
if (values == null) {
return null;
} else {
ArrayList<Long> validLongs = new ArrayList<Long>();
for (String value : values) {
if (value != null) {
Long LongValue = NumberUtils.toLong(value);
if (LongValue != null) {
validLongs.add(LongValue);
}
}
}
if (validLongs.isEmpty()) {
return null;
} else {
return validLongs;
}
}
}
public static Long getNumbers(String revstring) {
String result = NUMBER_PATTERN.matcher(revstring).replaceAll("");
return toLong(result);
}
public static String formatNumber(Number value, int minDecimals, int maxDecimals, boolean grouping, boolean dotDecimalSymbol) {
DecimalFormat formatter = new DecimalFormat();
formatter.setMinimumFractionDigits(minDecimals);
formatter.setMaximumFractionDigits(maxDecimals);
if (dotDecimalSymbol) {
formatter.setDecimalFormatSymbols(new DecimalFormatSymbols(Locale.US));
}
formatter.setGroupingUsed(grouping);
return formatter.format(value);
}
public static Byte toByte(String value) {
if (value != null) {
try {
return Byte.parseByte(value);
} catch (NumberFormatException e) {}
}
return null;
}
}