Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Java программирование > Общие вопросы по Java, Java SE, Kotlin
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 10.04.2019, 01:37   #1
SadiQ228
Пользователь
 
Регистрация: 30.10.2017
Сообщений: 66
По умолчанию проверка является ли строка числом?

у меня уже есть строка очищенная ото всего, и там исключительно послдовательность символов без разделителей и прочего, будет ли корректно вот такое:
Код:
public static boolean isInteger(String value) {
		if ((int)Integer.parseInt(value) == Integer.parseInt(value)) {
			return true;
			}
		return false;
        }
public static boolean isDouble(String value) {
    	if ((double)Double.parseDouble(value) == Double.parseDouble(value)) {
			return true;
			}
		return false;
        }
мне надо как я понимаю задание, проверить не только является ли число числом, но и вписывается ли в диапазон Int или double, как бы поэлегантнее это оформить? тока без эксепшенов.

Последний раз редактировалось SadiQ228; 10.04.2019 в 01:42.
SadiQ228 вне форума Ответить с цитированием
Старый 10.04.2019, 07:43   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

Конечно, нет. Вы два раза вызываете одну и туже функцию от одного итого же аргумента и сравниваете результаты... Это все равно, что от сравнения a + b == a + b ожидать проверки является ли a кубом.
Парсите и ловите исключения, либо натравливаете намберформат, либо регэкспом, либо какой-нибудь либой, типа апач коммон ленг...
p51x на форуме Ответить с цитированием
Старый 10.04.2019, 07:54   #3
ultimatet41
Форумчанин
 
Аватар для ultimatet41
 
Регистрация: 08.04.2012
Сообщений: 104
По умолчанию

Код:
public static boolean isDouble(String strNum) {
    try {
        double d = Double.parseDouble(strNum);
    } catch (NumberFormatException | NullPointerException nfe) {
        return false;
    }
    return true;
}
ultimatet41 вне форума Ответить с цитированием
Старый 10.04.2019, 17:50   #4
SadiQ228
Пользователь
 
Регистрация: 30.10.2017
Сообщений: 66
По умолчанию

мне нужно
Если ввод пользователя не соответствует спецификации, то функция запрашивает ввод
повторно. тоесть без эксепшенов
SadiQ228 вне форума Ответить с цитированием
Старый 10.04.2019, 17:58   #5
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

Эксепшены этому не мешают особо, да и в моем посте еще варианты есть.
p51x на форуме Ответить с цитированием
Старый 10.04.2019, 20:57   #6
SadiQ228
Пользователь
 
Регистрация: 30.10.2017
Сообщений: 66
По умолчанию

хотелось бы как то так может?
Код:
public static Object[] fscanf(String format) throws IOException{
        List<Object> data = new ArrayList<Object>();
        BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
        while(true) {
            String[] frmt = format.split(" "); 
            String[] str = reader.readLine().split(" +");
            if(frmt.length == str.length) {
                boolean flag = true;
                for(int i=0; i < frmt.length; i++) {
                    switch(frmt[i]) {
                    case "%d": if(!isInteger(str[i])) {flag = false;} break;
                    case "%f": if(!isDouble(str[i])) {flag = false;} break;
                    case "%s": if(!isString(str[i])) {flag = false;} break;
                    case "%c": if(!isSymbol(str[i])) {flag = false;} break;
                    default: flag = false; System.err.println("BAD SPECIFIER"); break;
                        }
                    }
                    if(flag) {
                        return data.toArray();
                        }
                    }
            System.err.print("Re-Enter data with good format: ");
            }
        }   
    
    private static boolean isInteger(String value) {
        if ((int)Integer.parseInt(value) == Integer.parseInt(value)) {
            return true;
            }
        return false;
        }
 
    private static boolean isDouble(String value) {
        if ((double)Double.parseDouble(value) == Double.parseDouble(value)) {
            return true;
            }
        return false;
        }
    
    private static boolean isString(String value) {
        if(!value.isEmpty()) {
            return true;
            }
        return false;
    }
    
    private static boolean isSymbol(String value) {
        if(value.length() == 1) {
            if(((value.charAt(0)>'a')&&(value.charAt(0)<'z'))||((value.charAt(0)>'A')&&(value.charAt(0)<'Z'))||
               ((value.charAt(0)>'а')&&(value.charAt(0)<'я'))||((value.charAt(0)>'А')&&(value.charAt(0)<'Я'))||
               ((value.charAt(0)>'0')&&(value.charAt(0)<'9'))){
                return true;
            }
            return false;
        }
        return false;
    }
но не работает, вылетает эксепшен что число не int
SadiQ228 вне форума Ответить с цитированием
Старый 11.04.2019, 08:12   #7
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

Вы посты совсем не читаете? Как из A + B == A + B следует проверка на то, что А куб?
p51x на форуме Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Написать программу, которая проверяет, является ли введенная с клавиатуры строка дробным числом. (язык C) Степан Симаков Помощь студентам 3 01.04.2014 23:10
Является ли число числом? Babayka94 Помощь студентам 7 19.06.2012 22:02
как сделать проверку переменной - является ли она числом? Bape}l{ka Microsoft Office Excel 4 22.12.2011 17:29
является ли введенная строка 16-ым числом Ялок Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 3 03.04.2011 14:52
Как проверить является ли числом? killer12rus JavaScript, Ajax 1 18.05.2009 05:09