Способ первый - использование метода 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()
Удалитьггг....
УдалитьЭтот комментарий был удален автором.
ОтветитьУдалитьИнтересные вы, ребята, задачи решаете! Найти бы в команду собраться таких..
ОтветитьУдалитьОХ ты ж.. сколько лет прошло, уже решая новые задачи, спустя столько опыта и выполненных задач, и снова сюда вернулся ))
ОтветитьУдалитьА всё потому, что ищу простой способ быстро корректировать вхождение чисел-строк в метод.