Определите, является ли String целым числом в Java

Я пытаюсь определить, является ли конкретный элемент в массиве строк целым числом или нет.

.split(" ")'ing выражение инфикса в форме String , а затем пытается разбить результирующий массив на два массива; один для целых чисел, один для операторов, отбрасывающий круглые скобки и другие разные элементы. Какой был бы лучший способ сделать это?

Я думал, что мог бы найти Integer.isInteger(String arg) или что-то в этом роде, но такой удачи не было.

Самый наивный способ – перебрать строку и убедиться, что все элементы являются действительными цифрами для данного элемента. Это примерно так же эффективно, как возможно, потому что вы должны смотреть на каждый элемент хотя бы один раз. Я полагаю, мы могли бы оптимизировать его на основе оснований, но для всех целей и целей это так же хорошо, как вы можете ожидать.

 public static boolean isInteger(String s) { return isInteger(s,10); } public static boolean isInteger(String s, int radix) { if(s.isEmpty()) return false; for(int i = 0; i < s.length(); i++) { if(i == 0 && s.charAt(i) == '-') { if(s.length() == 1) return false; else continue; } if(Character.digit(s.charAt(i),radix) < 0) return false; } return true; } 

Кроме того, вы можете полагаться на библиотеку Java, чтобы иметь это. Это не исключение, и вы поймете о каждом условии ошибки, о котором вы можете думать. Это будет немного дороже (вам нужно создать объект Scanner, который в критически плотной петле вы не хотите делать. Но обычно это не должно быть слишком дорогостоящим, поэтому для повседневной работы операции должны быть довольно надежными.

 public static boolean isInteger(String s, int radix) { Scanner sc = new Scanner(s.trim()); if(!sc.hasNextInt(radix)) return false; // we know it starts with a valid int, now make sure // there's nothing left! sc.nextInt(radix); return !sc.hasNext(); } 

Если для вас не важны лучшие практики или вы хотите троллить парня, который просматривает ваши отзывы, попробуйте это для размера:

 public static boolean isInteger(String s) { try { Integer.parseInt(s); } catch(NumberFormatException e) { return false; } catch(NullPointerException e) { return false; } // only got here if we didn't return false return true; } 

Использование регулярного выражения лучше.

 str.matches("-?\\d+"); -? --> negative sign, could have none or one \\d+ --> one or more digits 

NumberFormatException использовать NumberFormatException здесь, если вы можете использовать if-statement вместо этого.

Или вы можете получить небольшую помощь от наших хороших друзей в Apache Commons: StringUtils.isNumeric (String str)

Или просто

mystring.matches("\\d+")

хотя он вернет true для чисел, больших, чем int

Вы хотите использовать метод Integer.parseInt (String) .

 try{ int num = Integer.parseInt(str); // is an integer! } catch (NumberFormatException e) { // not an integer! } 

В качестве альтернативы попытке разобрать строку и NumberFormatException можно использовать регулярное выражение; например

 if (Pattern.compile("-?[0-9]+").matches(str)) { // its an integer } 

Скорее всего, это будет быстрее, особенно если вы предварительно скомпилируете и повторно используете регулярное выражение. Тем не менее, catch состоит в том, что Integer.parseInt(str) все равно будет терпеть неудачу, если str представляет число, находящееся вне диапазона значений законного int .

Вы можете использовать Integer.parseInt(str) и catch the NumberFormatException если строка не является допустимым целым числом, следующим образом (как указано всеми ответами):

 static boolean isInt(String s) { try { int i = Integer.parseInt(s); return true; } catch(NumberFormatException er) { return false; } } 

Однако обратите внимание, что если вычисляемое целочисленное число переполняется, будет выведено одно и то же исключение. Ваша цель состояла в том, чтобы выяснить, действительно ли это целое число. Поэтому его безопаснее сделать свой собственный метод для проверки действительности:

 static boolean isInt(String s) // assuming integer is in decimal number system { for(int a=0;a 

Вы можете использовать Integer.parseInt() или Integer.valueOf() чтобы получить целое число из строки и поймать исключение, если оно не является синтаксическим индексом. Вы хотите быть уверены, что поймаете NumberFormatException он может выбросить.

Может быть полезно отметить, что valueOf () вернет объект Integer, а не примитивный int.

 public boolean isInt(String str){ return (str.lastIndexOf("-") == 0 && !str.equals("-0")) ? str.substring(1).matches( "\\d+") : str.matches("\\d+"); } 
  • Как unescape строковый литерал Java в Java?
  • Что такое std :: string :: c_str () lifetime?
  • Есть ли способ избавиться от акцентов и преобразовать целую строку в обычные буквы?
  • Строка std :: содержит нулевой ограничитель?
  • Анализ HTML для получения контента с использованием C #
  • Как удалить ведущие нули из буквенно-цифрового текста?
  • Как разделять строку с любыми символами пробелов как разделителями?
  • Как использовать первый символ каждого слова в строке
  • Извлечь имя файла и расширение в Bash
  • Преобразование строки в int C ++
  • Как определить, имеет ли строка не алфавитно-цифровые символы?
  • Interesting Posts

    В чем разница между дисплеями WLED и RGBLED?

    PHP-скрипт не может запускать скрипт bash. Sh: Разрешение отклонено

    Android: получение имени контакта с номера телефона

    BackInTime / Kompare: не удается разобрать diff-выход при сравнении моментальных снимков

    Пример n случайных строк для каждой группы в кадре данных

    Модификатор static разрешен только в объявлениях с постоянной переменной

    Приложение для iPhone для воспроизведения музыки из доли samba

    Objective-C enumerateUsingBlock против быстрого enums?

    Использовать жесткий диск в качестве портативного жесткого диска?

    Запуск нескольких streamов пользовательского интерфейса

    Можете ли вы делать регулярные выражения в Excel без VBScript?

    Обнаруживать, если он работает как администратор с повышенными привилегиями или без них?

    Логические операторы в C

    Программно вернуться к предыдущему fragmentу в стопке

    ключевое слово java generics super

    Давайте будем гением компьютера.