Разбор строки в число
У меня есть список, который будет хранить объекты Number. Список будет заполнен путем разбора списка строк, где каждая строка может представлять любой подкласс номера.
Как выполнить синтаксический анализ строки с общим номером, а не с чем-то конкретным, как целое число или float?
Ответы
Ответ 1
Номер не может быть создан, потому что он является абстрактным классом. Я бы рекомендовал передать в Numbers, но если вы настроены на Strings, вы можете проанализировать их с помощью любого из подклассов,
Number num = Integer.parseInt(myString);
или
Number num = NumberFormat.getInstance().parse(myNumber);
@See NumberFormat
Ответ 2
Вы можете использовать класс java.text.NumberFormat. Этот класс имеет метод parse(), который анализирует заданную строку и возвращает соответствующие объекты Number.
public static void main(String args[]){
List<String> myStrings = new ArrayList<String>();
myStrings.add("11");
myStrings.add("102.23");
myStrings.add("22.34");
NumberFormat nf = NumberFormat.getInstance();
for( String text : myStrings){
try {
System.out.println( nf.parse(text).getClass().getName() );
} catch (ParseException e) {
e.printStackTrace();
}
}
}
Ответ 3
Простым способом является проверка на точку Pattern.matches("\\.")
. Если он имеет точку разбора как Float.parseFloat()
и проверяет наличие исключения. Если существует синтаксис исключения как Double.parseDouble()
. Если у него нет точки, просто попробуйте разобрать Integer.parseInt()
, и если это не сработает, перейдите на Long.parseLong()
.
Ответ 4
Что-то вроде следующего:
private static Number parse(String str) {
Number number = null;
try {
number = Float.parseFloat(str);
} catch(NumberFormatException e) {
try {
number = Double.parseDouble(str);
} catch(NumberFormatException e1) {
try {
number = Integer.parseInt(str);
} catch(NumberFormatException e2) {
try {
number = Long.parseLong(str);
} catch(NumberFormatException e3) {
throw e3;
}
}
}
}
return number;
}
Ответ 5
вы можете получить Number
из String
с помощью commons.apache api → https://commons.apache.org/proper/commons-lang/javadocs/api-3.4/index.html
Использование:
String value = "234568L"; //long in the form string value
Number number = NumberUtils.createNumber(value);
Ответ 6
Integer.valueOf(string s)
возвращает объект Integer, содержащий значение указанной строки.
Целое - это специализированный объект Number