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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Корректно преобразовать строку в число, учитывая разделители разрядов 
:(
    Опции темы
Real McCoy
Дата 22.1.2008, 19:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Здравствуйте все!

О преобразовании чисел, выраженных в виде строки я тут читал. Сам пробовал два способа:

1. Проверки с помощью исключения:
Код

try
{
    double value = Double.parseDouble("12345.67")
}
catch(NumberFormatException ex)
{
    // не число
}


2. Проверки с помощью регэкспа:
Код

boolean isNumeric = java.util.regex.Pattern.matches("[\\d\\.\\,\\s]*", "12345.67");


Сейчас, столкнулся я со следующей проблемой: на форме есть JSpinner с моделью SpinnerNumberModel, редактирование поля у спиннера разрешено. Необходима валидация введённого пользователем.

Введённое в поле Спиннера получается путём такого страшного выражения:
Код

String text = ((JSpinner.DefaultEditor)spinner.getEditor()).getTextField().getText();


И оказывается, что например в числе 1000, которое после получения выглядит как "1 000" (введено не пользователем, а пролистано спиннером), между 1 и 0 не пробел, а символ с десятичным кодом 160. Если эту строку попытаться проверить любым из двух способов, то оно не распознается как число.

Вопрос: как всё-таки сделать валидацию на то, что в спиннере число?
PM MAIL   Вверх
powerOn
Дата 22.1.2008, 20:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


software saboteur
****


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

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



А почему вы получаете число из вида, а не из модели?

Код

jSpinner1.setModel(new SpinnerNumberModel());
. . .
SpinnerNumberModel model = (SpinnerNumberModel) jSpinner1.getModel();
System.out.println("value = " + model.getNumber());





--------------------
user posted image нет времени думать - нужно писать КОД!

PM MAIL   Вверх
Real McCoy
Дата 23.1.2008, 12:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Потому что модель вернёт последнее корректное значение спиннера. А мне надо предупредить пользователя, если он ввёл что-то неправильное, что значение спиннера откачено к предыдущему. Иначе он просто не заметит этого, т.к. на форме довольно много контролов.
PM MAIL   Вверх
Maksym
Дата 23.1.2008, 12:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


.
***


Профиль
Группа: Участник Клуба
Сообщений: 1456
Регистрация: 19.8.2005
Где: Odessa, Black Sea

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



Real McCoy
А если удалить из строки все символы с десятичным кодом 160 и применить описанный тобой способ? smile 
PM MAIL   Вверх
Real McCoy
Дата 23.1.2008, 14:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


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

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



Maksym, 
В конце концов я так и сделал. Только символ для замены на пустой получаю у эдитора спиннера:
Код

char groupSeparator = ((JSpinner.NumberEditor)spinner.getEditor()).getFormat().getDecimalFormatSymbols().getGroupingSeparator();


Правда выглядит это как workaround.
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

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

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


 




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


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

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