Если строка, содержащая число больше, чем Integer.MAX_VALUE - PullRequest
0 голосов
/ 06 декабря 2018

Я хочу найти, если задана строка "99999999999999999999999999" или любое массивное число, которое не подходит ни к какому типу данных. Я хотел бы найти, если это число больше, чем Integer.MAX_VALUE

Ответы [ 5 ]

0 голосов
/ 06 декабря 2018

Вы можете проанализировать его как int и поймать исключение или BigInteger, или вы можете сделать сравнение строк.

static final String MAX_INT_STR = Integer.toString(Integer.MAX_VALUE);

public static boolean checkInt(String s) {
    return s.length() > MAX_INT_STR.length() || s.compareTo(MAX_INT_STR) > 0;
}

Это может быть использовано, чтобы не вызывать некоторые исключения перед попыткой разобрать его.

ПРИМЕЧАНИЕ. Это не проверяет, что оно содержит только цифры, но если это положительное число, оно проверяет, что оно находится в границах, без разбора строки.

0 голосов
/ 06 декабря 2018

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

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

  • Если String содержит более 10 символов (или 11, если первый символ равен '-' или '+'), он должен быть больше Integer.MAX_VALUE или меньше Integer.MIN_VALUE.
  • В противном случае, позвоните Long.parseLong() и сравните результат с Integer.MAX_VALUE.
0 голосов
/ 06 декабря 2018

Использование BigInteger

BigInteger maxInt = BigInteger.valueOf(Integer.MAX_VALUE);
BigInteger value = new BigInteger("whatever");

if (value.compareTo(maxInt) > 0)
{
    // larger
}
0 голосов
/ 06 декабря 2018

Попробуйте следующий код, чтобы проверить, не слишком ли он велик, чтобы поместиться в целое число:

String num = "99999999999999999999999999";

try {
    Integer.parseInt(num);
} catch(NumberFormatException ex) {
    System.out.println("String did not fit in integer datatype");
}

Этот код попытается проанализировать num в целое число, которое мы можем перехватить, если это не так, и выполнитькод, когда это происходит (в данном случае просто println).

From parseInt():

Броски: NumberFormatException - если строка несодержит анализируемое целое число.

0 голосов
/ 06 декабря 2018

Вы можете построить объект BigInteger из строки и затем сравнить это BigInteger с Integer.MAX_VALUE.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...