Determine if a String is an Integer in Java [duplicate]
Определить, является ли строка целым числом в Java
Я пытаюсь определить, является ли конкретный элемент в массиве строк целым числом или нет.
Я .split(" ")создаю инфиксное выражение в String форме, а затем пытаюсь разделить результирующий массив на два массива; один для целых чисел, другой для операторов, отбрасывая круглые скобки и другие разные элементы. Какой был бы наилучший способ добиться этого?
Я думал, что смогу найти Integer.isInteger(String arg) метод или что-то в этом роде, но безуспешно.
Переведено автоматически
Ответ 1
Самым наивным способом было бы выполнить итерацию по строке и убедиться, что все элементы являются допустимыми цифрами для данного основания. Это примерно настолько эффективно, насколько это возможно, поскольку вы должны просмотреть каждый элемент хотя бы один раз. Я полагаю, мы могли бы микрооптимизировать ее на основе основы, но по сути это все, что вы можете ожидать получить.
В качестве альтернативы вы можете положиться на то, что это доступно в библиотеке Java. Это не основано на исключениях и отловит практически любое условие ошибки, о котором вы можете подумать. Это будет немного дороже (вам придется создать объект сканирования, чего в критически ограниченном цикле вы не хотите делать. Но обычно это не должно быть слишком дорого, поэтому для повседневных операций это должно быть довольно надежно.
publicstaticbooleanisInteger(String s, int radix) { Scannersc=newScanner(s.trim()); if(!sc.hasNextInt(radix)) returnfalse; // we know it starts with a valid int, now make sure // there's nothing left! sc.nextInt(radix); return !sc.hasNext(); }
Если рекомендации для вас не имеют значения или вы хотите троллить парня, который делает обзоры вашего кода, попробуйте это для определения размера:
publicstaticbooleanisInteger(String s) { try { Integer.parseInt(s); } catch(NumberFormatException e) { returnfalse; } catch(NullPointerException e) { returnfalse; } // only got here if we didn't return false returntrue; }
Ответ 2
Лучше использовать регулярное выражение, подобное этому:
str.matches("-?\\d+");
-? --> negative sign, could have none or one \\d+ --> one or more digits
Не стоит использовать NumberFormatException здесь, если вы можете использовать if-statement вместо этого.
Если вам не нужны начальные нули, вы можете просто использовать регулярное выражение следующим образом: