Заметки программиста
Этот вопрос возникает наверное у каждого начинающего (и не очень) программиста на java. Есть несколько способов выполнить вышеописанную задачу.
Способ первый — использование метода 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)
Этот метод выполняется примерно с одинаковой скоростью вне зависимости от того является ли строка числом.
Способ третий — проверка по очереди каждого символа в строке.
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 > return true; >
При тестировании данный метод показал на удивление хорошие результаты — более чем в 3 раза быстрее, чем самый быстрый случай для первого и второго метода.
Третий метод и второй для преобрахования строк не подходят, в отличие от первого (при небольшой доработке).
Поэтому если задача стоит только в определении является ли строка числом — то лучше всего подойдет именно третий метод, если же помимо прочего ещё и необходимо преобразовать строку в число то лучше воспользоваться 1 методом, немного видоизменив его.
Определите, начинается ли строка с числа в Java
Этот пост проверит, начинается ли строка с числа или нет в Java.
1. Наивное решение
Наивное решение состоит в том, чтобы извлечь первый символ из заданной строки, используя charAt() метод и проверьте, попадает ли символ в числовой диапазон ASCII или нет.
class Main
public static void main ( String [ ] args )
String str = «12ABC» ;
char ch = str . charAt ( 0 ) ;
System . out . println ( ch >= ‘0’ && ch <= '9' ) ; // true
2. Использование Character.isDigit() метод
Рекомендуемое решение — использовать Character.isDigit(char) метод, чтобы проверить, является ли первый символ строки цифрой или нет. Обратите внимание, что это также поддерживает все цифры Unicode.
class Main
public static void main ( String [ ] args )
String str = «12ABC» ;
System . out . println ( Character . isDigit ( str . charAt ( 0 ) ) ) ; // true
3. Использование регулярных выражений
Другой вероятный способ определить, заканчивается ли строка числом или нет, — это использование регулярных выражений. Этот подход не рекомендуется, так как регулярные выражения очень медленные.
class Main
public static void main ( String [ ] args )
String str = «12ABC» ;
System . out . println ( str . matches ( «\\d.*» ) ) ; // true
System . out . println ( str . matches ( «[0-9].*» ) ) ; // true
Обратите внимание, что все приведенные выше решения предполагают, что строка не пуста. Если строка пуста, программа выдаст StringIndexOutOfBoundsException .
Это все о проверке, начинается ли строка с числа в Java.
Оценить этот пост
Средний рейтинг 4.6 /5. Подсчет голосов: 10
Голосов пока нет! Будьте первым, кто оценит этот пост.
Сожалеем, что этот пост не оказался для вас полезным!
Расскажите, как мы можем улучшить этот пост?
Спасибо за чтение.
Пожалуйста, используйте наш онлайн-компилятор размещать код в комментариях, используя C, C++, Java, Python, JavaScript, C#, PHP и многие другие популярные языки программирования.
Как мы? Порекомендуйте нас своим друзьям и помогите нам расти. Удачного кодирования 🙂
Подписывайся
2 Комментарии
Большинство голосов
Новейшие Самый старый
Встроенные отзывы
Просмотреть все комментарии
Просмотр комментариев
Загрузить больше комментариев
Просматривать
Подпишитесь на новые публикации
- Все проблемы
- Практика DSA
- 100 самых популярных задач
- 50 лучших классических задач
- Лучшие алгоритмы
- Компилятор С/С++
- Компилятор Java
- Компилятор Python
- Компилятор JavaScript
- компилятор PHP
- Компилятор C#
- Свяжитесь с нами
- Политика конфиденциальности
- условия обслуживания
- Подпишитесь на новые публикации
Techie Delight © 2023 Все права защищены.
Этот веб-сайт использует файлы cookie. Используя этот сайт, вы соглашаетесь с использованием файлов cookie, нашей политикой, условиями авторского права и другими условиями. Читайте наши Политика конфиденциальности. Понятно
Как проверить что строка это число java
у меня уже есть строка очищенная ото всего, и там исключительно послдовательность символов без разделителей и прочего, будет ли корректно вот такое:
public static boolean isInteger(String value) < if ((int)Integer.parseInt(value) == Integer.parseInt(value)) < return true; >return false; > public static boolean isDouble(String value) < if ((double)Double.parseDouble(value) == Double.parseDouble(value)) < return true; >return false; >
мне надо как я понимаю задание, проверить не только является ли число числом, но и вписывается ли в диапазон Int или double, как бы поэлегантнее это оформить? тока без эксепшенов.
Последний раз редактировалось SadiQ228; 10.04.2019 в 01:42 .
Регистрация: 15.02.2010
Сообщений: 15,586
Конечно, нет. Вы два раза вызываете одну и туже функцию от одного итого же аргумента и сравниваете результаты. Это все равно, что от сравнения a + b == a + b ожидать проверки является ли a кубом.
Парсите и ловите исключения, либо натравливаете намберформат, либо регэкспом, либо какой-нибудь либой, типа апач коммон ленг.
Форумчанин
Регистрация: 08.04.2012
Сообщений: 104
public static boolean isDouble(String strNum) < try < double d = Double.parseDouble(strNum); >catch (NumberFormatException | NullPointerException nfe) < return false; >return true; >
| ultimatet41 |
| Посмотреть профиль |
| Найти ещё сообщения от ultimatet41 |
Пользователь
Регистрация: 30.10.2017
Сообщений: 66
мне нужно
Если ввод пользователя не соответствует спецификации, то функция запрашивает ввод
повторно. тоесть без эксепшенов
Регистрация: 15.02.2010
Сообщений: 15,586
Эксепшены этому не мешают особо, да и в моем посте еще варианты есть.
Пользователь
Регистрация: 30.10.2017
Сообщений: 66
хотелось бы как то так может?
public static Object[] fscanf(String format) throws IOException < Listdata = new ArrayList(); BufferedReader reader = new BufferedReader(new InputStreamReader(System.in)); while(true) < String[] frmt = format.split(" "); String[] str = reader.readLine().split(" +"); if(frmt.length == str.length) < boolean flag = true; for(int i=0; i < frmt.length; i++) < switch(frmt[i]) < case "%d": if(!isInteger(str[i])) break; case "%f": if(!isDouble(str[i])) break; case "%s": if(!isString(str[i])) break; case "%c": if(!isSymbol(str[i])) break; default: flag = false; System.err.println("BAD SPECIFIER"); break; > > if(flag) < return data.toArray(); >> System.err.print("Re-Enter data with good format: "); > > private static boolean isInteger(String value) < if ((int)Integer.parseInt(value) == Integer.parseInt(value)) < return true; >return false; > private static boolean isDouble(String value) < if ((double)Double.parseDouble(value) == Double.parseDouble(value)) < return true; >return false; > private static boolean isString(String value) < if(!value.isEmpty()) < return true; >return false; > private static boolean isSymbol(String value) < if(value.length() == 1) < if(((value.charAt(0)>'a')&&(value.charAt(0)<'z'))||((value.charAt(0)>'A')&&(value.charAt(0)<'Z'))|| ((value.charAt(0)>'а')&&(value.charAt(0)<'я'))||((value.charAt(0)>'А')&&(value.charAt(0)<'Я'))|| ((value.charAt(0)>'0')&&(value.charAt(0) <'9')))< return true; >return false; > return false; >
но не работает, вылетает эксепшен что число не int
Как проверить что строка это число java
Чтобы проверить, что строка содержит число, можно воспользоваться библиотекой Apache Commons Lang. В классе StringUtils этой библиотеки есть метод isNumeric() . Этот метод принимает на вход строку и проверяет, содержит ли она только цифры.
Чтобы использовать библиотеку, добавьте в файл build.gradle следующий код:
implementation 'org.apache.commons:commons-lang3:3.12.0'
Используем этот метод:
// Импортируем класс StringUtils import org.apache.commons.lang3.StringUtils // Используем метод класса для проверки строк StringUtils.isNumeric("123") = true StringUtils.isNumeric("१२३") = true StringUtils.isNumeric("12 3") = false StringUtils.isNumeric("ab2c") = false