Способ первый - использование метода Integer.parseInt(String string).
public boolean checkString(String string) { try { Integer.parseInt(string); } catch (Exception e) { return false; } return true; }Этот способ очень быстро выполняется если строка является числом (в 5-10 раз быстрее, чем способ с использованием регулярных выражений), и очень долго - если строка числом не является (примерно в 1,5 раз дольше, чем способ с использованием регулярных выражений).
Способ второй - использование регулярных выражений.
public boolean checkString(String string) { if (string == null) return false; return string.matches("^-?\\d+$"); }
Этот метод выполняется примерно с одинаковой скоростью вне зависимости от того является ли строка числом.
Способ третий - проверка по очереди каждого символа в строке.
public boolean checkString(String string) { if (string == null || string.length() == 0) return false; int i = 0; if (string.charAt(0) == '-') { if (string.length() == 1) { return false; } i = 1; } char c; for (; i < string.length(); i++) { c = string.charAt(i); if (!(c >= '0' && c <= '9')) { return false; } } return true; }
При тестировании данный метод показал на удивление хорошие результаты - более чем в 3 раза быстрее, чем самый быстрый случай для первого и второго метода.
Третий метод и второй для преобрахования строк не подходят, в отличие от первого (при небольшой доработке).
Поэтому если задача стоит только в определении является ли строка числом - то лучше всего подойдет именно третий метод, если же помимо прочего ещё и необходимо преобразовать строку в число то лучше воспользоваться 1 методом, немного видоизменив его.