Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / является ли содержимое строки числом? / 12 сообщений из 12, страница 1 из 1
28.01.2007, 02:36:28
    #34287690
-=St=-
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
является ли содержимое строки числом?
Если мне надо проверить является ли содержимое строки числом, я делаю это так:
Код: plaintext
1.
2.
3.
4.
5.
6.
 try {
	Integer.parseInt(string);
} catch (NumberFormatException exc)
{
// НЕТ ЭТО НЕ ЧИСЛО
 throw   new  NumberFormatException();
}
Все отлично, но можно как нить проще? Без try catch?
...
Рейтинг: 0 / 0
28.01.2007, 03:46:10
    #34287702
_anonymous
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
является ли содержимое строки числом?
-=St=-Если мне надо проверить является ли содержимое строки числом, я делаю это так:
Код: plaintext
1.
2.
3.
4.
5.
6.
 try {
	Integer.parseInt(string);
} catch (NumberFormatException exc)
{
// НЕТ ЭТО НЕ ЧИСЛО
 throw   new  NumberFormatException();
}
Все отлично, но можно как нить проще? Без try catch?

Непонятно, зачем ты ловишь исключение, чтобы тут же его выбросить снова.
Другого метода нет (по крайней мере, я его не знаю)
...
Рейтинг: 0 / 0
28.01.2007, 04:14:11
    #34287708
mysterio
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
является ли содержимое строки числом?
Добавь в определение метода директиву throws:
public void someMethod() throws NumberFormatException
и тогда оно прокинется выше по стеку
...
Рейтинг: 0 / 0
28.01.2007, 04:15:36
    #34287709
mysterio
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
является ли содержимое строки числом?
addon: ну и что тебе мешает на основе этого сделать метод:
boolean isInteger(String value), а в нем в зависимости от исключения возвращать true или false.
...
Рейтинг: 0 / 0
28.01.2007, 09:47:35
    #34287749
Зашедший
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
является ли содержимое строки числом?
throws прилично тормозит работу, так что лучше будет использовать DecimalFormat&ParsePosition. См. тынц .
...
Рейтинг: 0 / 0
28.01.2007, 10:49:50
    #34287773
mysterio
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
является ли содержимое строки числом?
гм.. а можете тогда уже и пояснить, почему throws тормозит работу?

Я знаю, что исключения тормозят работу, когда они выкидываются.. это да...
но так.. это же просто подсказка компилятору!

В-любом случае буду признателен за обстоятельный ответ.
...
Рейтинг: 0 / 0
28.01.2007, 11:02:38
    #34287776
является ли содержимое строки числом?
А что если вначале зарядить проверку через регулярные выражения, а потом или парсить или выкидывать исключение?
...
Рейтинг: 0 / 0
28.01.2007, 12:06:56
    #34287832
Leonidv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
является ли содержимое строки числом?
-=St=-Если мне надо проверить является ли содержимое строки числом, я делаю это так:
Все отлично, но можно как нить проще? Без try catch?
Вообще, это не отлично. Это через одно место и делать так лишний раз не надо (конечно, если идет речь именно о проверке - описывает строка число или нет). Лучше использовать что-то вроде этого, либо посмотреть исходный код и выдрать нужный кусочек:
http://jakarta.apache.org/commons/validator/apidocs/org/apache/commons/validator/routines/IntegerValidator.html
...
Рейтинг: 0 / 0
28.01.2007, 13:00:37
    #34287872
является ли содержимое строки числом?
Leonidv
Вообще, это не отлично. Это через одно место и делать так лишний раз не надо (конечно, если идет речь именно о проверке - описывает строка число или нет). Лучше использовать что-то вроде этого, либо посмотреть исходный код и выдрать нужный кусочек:
http://jakarta.apache.org/commons/validator/apidocs/org/apache/commons/validator/routines/IntegerValidator.html
Вынужден с вами не согласиться. А почему?
А потому!
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
     public   static   void  test51()  throws  Exception {
        
         int  CNT =  10000000 ;        
        Random rand =  new  Random();
        Secundomer intParse = XProfiler.registerProfile("Parsing " + CNT + 
" times by Integer.parseInt ", "");
        intParse.start();
         for  ( int  i =  0 ; i < CNT; i++) {
             int  x = Integer.parseInt(String.valueOf(rand.nextInt( 100000 )));
        }
        intParse.stop();

        NumberFormat formatter = NumberFormat.getNumberInstance(Locale.getDefault());
        formatter.setParseIntegerOnly(true);       
        
        Secundomer numFormat = XProfiler.registerProfile("Parsing " + CNT + 
" times by formatter.parse ", "");
        numFormat.start();
         for  ( int  i =  0 ; i < CNT; i++) {
            Number n = formatter.parse(String.valueOf(rand.nextInt( 100000 )));
             int  x = n.intValue();
        }
        numFormat.stop();
        
        XProfiler.printReport();
        
    }




"C:\Program Files\Java\jdk1.5.0_10\bin\javaw" com.forward.test.gendata 
 --- Registered profile 'Parsing 10000000 times by Integer.parseInt '
 --- Registered profile 'Parsing 10000000 times by formatter.parse '
 --- COUNTERS --- 
 --- PROFILES --- 
count	|dur	|avg	|min	|max	|NAME
 -  1 	| 5 . 031 	| 5 . 031 	| 5 . 031 	| 5 . 031 	|Parsing  10000000  times by Integer.parseInt  ()
 -  1 	| 14 . 0 	| 14 . 0 	| 14 . 0 	| 14 . 0 	|Parsing  10000000  times by formatter.parse  ()


Всё честно?
...
Рейтинг: 0 / 0
28.01.2007, 14:31:11
    #34287960
Leonidv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
является ли содержимое строки числом?
Да, только вы условие задачи подменили :)
Проблема не в переводе строки в число (грубо говоря), а в определение - описывает ли строка число, или нет.
PS Я с валидаторами от jakarta никогда не работал (впрочем, как и с другими). Поэтому вкрались сомнения, как они там определяют валидность данных. Вдруг тоже через исключения :)
...
Рейтинг: 0 / 0
28.01.2007, 14:59:02
    #34287991
Зашедший
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
является ли содержимое строки числом?
mysterioгм.. а можете тогда уже и пояснить, почему throws тормозит работу?

Я знаю, что исключения тормозят работу, когда они выкидываются.. это да...
но так.. это же просто подсказка компилятору!

В-любом случае буду признателен за обстоятельный ответ.
Я некорректно выразился. Тормозит, собственно, не индикатор throws метода (это действительно просто директива), а необходимость в конечном счете всегда обертывать данный метод в try..catch. А вот многократный вызов секции try..catch уже замедляет работу в сравнении с вызовом точно того же кода без обработки ошибок. В случае примитивнейшей функции типо:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
 int  withTry( int  i) {
     try  {
         return  i;
     catch (Exception e) {
         return  - 1 ;
    }
}

 int  withoutTry( int  i) {
     return  i;
}
разница в скорости работы примерно в четыре раза. Хотя пример, конечно, искусственный и вообще я бы на эту тему не заморачивался :)
...
Рейтинг: 0 / 0
28.01.2007, 15:47:33
    #34288031
является ли содержимое строки числом?
LeonidvДа, только вы условие задачи подменили :)
Проблема не в переводе строки в число (грубо говоря), а в определение - описывает ли строка число, или нет.
PS Я с валидаторами от jakarta никогда не работал (впрочем, как и с другими). Поэтому вкрались сомнения, как они там определяют валидность данных. Вдруг тоже через исключения :)
Валидатор из commons от jakarta делает NumberFormat.parse. Причем в три раза медленнее, чем Integer.parseInt.
Других способов проверить является ли строка числом, без написание аналогов Integer.parseInt'а или регулярных выражений — я не вижу.
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / является ли содержимое строки числом? / 12 сообщений из 12, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]