Мне кажется, или это кажется немного халтурным? Какой способ лучше?
Посмотрите мой ответ (с бенчмарками, основанный на более раннем ответе от CodingWithSpike ), чтобы понять, почему я изменил свою позицию и принял ответ Джонаса Клемминга на эту проблему. Я думаю, что этот исходный код будет использоваться большинством людей, потому что он быстрее в реализации и более удобен в обслуживании, но работает на порядки медленнее, когда предоставляются нецелочисленные данные.
Переведено автоматически
Ответ 1
Если вас не беспокоят потенциальные проблемы с переполнением, эта функция будет выполняться примерно в 20-30 раз быстрее, чем при использовании Integer.parseInt().
publicstaticbooleanisInteger(String str) { if (str == null) { returnfalse; } intlength= str.length(); if (length == 0) { returnfalse; } inti=0; if (str.charAt(0) == '-') { if (length == 1) { returnfalse; } i = 1; } for (; i < length; i++) { charc= str.charAt(i); if (c < '0' || c > '9') { returnfalse; } } returntrue; }
Ответ 2
У вас это есть, но вы должны только перехватывать NumberFormatException.
Ответ 3
Провел быстрый тест. Исключения на самом деле не такие уж дорогие, если только вы не начнете возвращать несколько методов, и JVM не придется проделывать большую работу, чтобы установить стек выполнения на место. Оставаясь в том же методе, они неплохо работают.