Вопрос-ответ

Determine if a String is an Integer in Java [duplicate]

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

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

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

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

Переведено автоматически
Ответ 1

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

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. Это не основано на исключениях и отловит практически любое условие ошибки, о котором вы можете подумать. Это будет немного дороже (вам придется создать объект сканирования, чего в критически ограниченном цикле вы не хотите делать. Но обычно это не должно быть слишком дорого, поэтому для повседневных операций это должно быть довольно надежно.

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;
}
Ответ 2

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

str.matches("-?\\d+");

-?     --> negative sign, could have none or one
\\d+ --> one or more digits

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

Если вам не нужны начальные нули, вы можете просто использовать регулярное выражение следующим образом:

str.matches("-?(0|[1-9]\\d*)");
Ответ 3

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

Ответ 4

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

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