Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Проверка DecimalFormat, исключить нецифровые символы 
V
    Опции темы
Rilken
Дата 27.3.2009, 15:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 10.3.2007
Где: Днепропетровск

Репутация: нет
Всего: нет



Good time of day!
Перечитала все, что нашел поиск, но решения проблемы не нашла.
Есть поле, в который вводится число. Нужно, чтобы при вводе, допустим 3435$33 (нечисловой символ), выдавался мессадж о некорректном вводе. Вместо этого имеем  некрасивый эксепшн.
Код:
Код

DecimalFormat numberChecker = new DecimalFormat("###########");
      ParsePosition parsePosition = new ParsePosition(0);
      if ( (numberChecker.parse(formBean.getNumber(), parsePosition) == null) ||
           (parsePosition.getErrorIndex() >= 0)
         )
        errors.add( ActionErrors.GLOBAL_ERROR,
                    new ActionError("error.invalid.Number")
                   );

Почему (numberChecker.parse(formBean.getNumber(), parsePosition) пропусает число без ошибок (parsePosition.getErrorIndex()=-1)?

Спасибо за вниманиеsmile
PM ICQ Skype   Вверх
chaos
Дата 27.3.2009, 15:07 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Серийный программист
****


Профиль
Группа: Завсегдатай
Сообщений: 2979
Регистрация: 7.7.2004
Где: Екатеринбург

Репутация: нет
Всего: 44



первое что приходит в голову: проверить регулярным выражением: \\d+ для целых и \\d+\\.\\d+ и как нибудь так для вещественных
Код

if (true == formBean.getNumber().match("\\d+\\.\\d+")) {
    //oke
}


если надо просто проверить на вхождение левых символов
Код

if (true == formBean.getNumber().match("\\d+")) {
    //oke
}




Это сообщение отредактировал(а) chaos - 27.3.2009, 15:12
PM WWW   Вверх
Rilken
Дата 27.3.2009, 15:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 10.3.2007
Где: Днепропетровск

Репутация: нет
Всего: нет



chaos, это то, что мне тоже пришло в голову, но я недавно работаю с Java, не знала как это реализовать (matches) smile Спасибо.
PM ICQ Skype   Вверх
LSD
Дата 27.3.2009, 16:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15719
Регистрация: 24.3.2004
Где: Dublin

Репутация: 38
Всего: 538



1. Есть способ проще:
Код

JFormattedTextField numberTextField = new JFormattedTextField(NumberFormat.getIntegerInstance());

ввести неправильный символ можно будет, но при потере фокуса все изменения будут отменены и возвращено последнее действительное значение.

2. Если нужно именно не допускать ввода ничего кроме цифр, то надо смотреть в сторону DocumentFilter (поищи по форуму, тема обсуждалась).


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
Rilken
Дата 27.3.2009, 17:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 10.3.2007
Где: Днепропетровск

Репутация: нет
Всего: нет



Цитата(LSD @ 27.3.2009,  16:22)
DocumentFilter 

Интересно, спасибо за наводкуsmile

PM ICQ Skype   Вверх
Connie
Дата 27.3.2009, 19:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 382
Регистрация: 12.8.2008

Репутация: 8
Всего: 9



А почему не использовать MaskFormatter? Там вообще не получится ввести не число

или так
Код

JFormattedTextField fldK1 = new JFormattedTextField(new DecimalFormat("0.00"));


или обязательно пользователя пугать мессагами? - Туда не ходи! Башка кирпич упадет!..  smile 

Извините

Это сообщение отредактировал(а) Connie - 27.3.2009, 19:13
PM MAIL WWW   Вверх
Rilken
Дата 27.3.2009, 23:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 10.3.2007
Где: Днепропетровск

Репутация: нет
Всего: нет



Цитата(Connie @ 27.3.2009,  19:12)
или обязательно пользователя пугать мессагами? - Туда не ходи! Башка кирпич упадет!..  smile 


Нет, не обязательно, просто во всем проекте такая логика и из-за одного эдита смысла ее менять нетsmile Поэтому первый вариант с regex подходит идеально.
Но другие мнения тоже интересно послушатьsmile

Это сообщение отредактировал(а) Rilken - 27.3.2009, 23:11
PM ICQ Skype   Вверх
Connie
Дата 28.3.2009, 09:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 382
Регистрация: 12.8.2008

Репутация: 8
Всего: 9



Код

MaskFormatter mask;
        try{
            mask = new MaskFormatter("############");
        }catch(Exception e){
            mask = new MaskFormatter();
        }

        JFormattedTextField onlydigits = new JFormattedTextField(mask);
Минус в том, что вводимое количество символов ограничено кол-м решёток.


PM MAIL WWW   Вверх
Rilken
Дата 28.3.2009, 10:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 12
Регистрация: 10.3.2007
Где: Днепропетровск

Репутация: нет
Всего: нет



Цитата(Connie @ 28.3.2009,  09:34)
Код

MaskFormatter mask;
        try{
            mask = new MaskFormatter("############");
        }catch(Exception e){
            mask = new MaskFormatter();
        }

        JFormattedTextField onlydigits = new JFormattedTextField(mask);
Минус в том, что вводимое количество символов ограничено кол-м решёток.

Я знаю, так мне так и надоsmile
PM ICQ Skype   Вверх
Connie
Дата 28.3.2009, 12:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 382
Регистрация: 12.8.2008

Репутация: 8
Всего: 9



Rilken, ну и учитывать нужно, что функция
Код

onlydigits.getValue() 

будет возвращать объект типа String, который не сложно пропарсить к целому, мы то уверены, что там могут быть только числа smile

Код

int value = Integer.parse( ((String)onlydigits.getValue()) );
 вроде так smile
PM MAIL WWW   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   jk1
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, jk1.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: GUI и Java FX приложения | Следующая тема »


 




[ Время генерации скрипта: 0.0569 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.