Способ первый - использование метода 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 методом, немного видоизменив его.
А 3й метод = true при string="-"?
ОтветитьУдалитьСпасибо за комментарий! Подправил код.
УдалитьСпасибо, помогло на лабе)
ОтветитьУдалитьа как узнать является ли первый символ числом и если да, то его запомнить ?
ОтветитьУдалитьне совсем понятно что значит запомнить, но если предположить что это то же самое что вывести то код будет примерно такой
УдалитьString x = "5agg";// проверяемая строка
char c = x.charAt(0);
if (c >= '0' && c <= '9') {
System.out.println(c);
}
Лучше так
ОтветитьУдалитьCharacter.isDigit(x.charAt(i))
Нужна ваша помощь!
ОтветитьУдалитьУ меня задание, где нужно вести числа в отдельном методе. Обернуть тело метода в try..catch, если введены буквы, нужно перехватить исключение и вывести на экран все введенные числа. Мне нужна проверка каждого символа. У вас в примере 3 проверка идет строки типа String , а у меня проверка должна быть с строки типа int a = Integer.parseInt(reader.readLine());. Но с переменной "а" я не могу вызвать функцию charAt. Что я не так делаю?
(""+a).charAt()
Удалитьггг....
УдалитьЭтот комментарий был удален автором.
ОтветитьУдалитьИнтересные вы, ребята, задачи решаете! Найти бы в команду собраться таких..
ОтветитьУдалитьОХ ты ж.. сколько лет прошло, уже решая новые задачи, спустя столько опыта и выполненных задач, и снова сюда вернулся ))
ОтветитьУдалитьА всё потому, что ищу простой способ быстро корректировать вхождение чисел-строк в метод.