Способ первый - использование метода 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 методом, немного видоизменив его.