Разбор строки в число

У меня есть список, который будет хранить объекты 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;
}

Ответ 6

Integer.valueOf(string s)

возвращает объект Integer, содержащий значение указанной строки.

Целое - это специализированный объект Number