- 01
 - 02
 - 03
 - 04
 - 05
 - 06
 - 07
 - 08
 - 09
 - 10
 - 11
 - 12
 - 13
 - 14
 - 15
 - 16
 - 17
 - 18
 - 19
 - 20
 - 21
 - 22
 - 23
 - 24
 - 25
 - 26
 - 27
 - 28
 - 29
 - 30
 - 31
 - 32
 - 33
 - 34
 - 35
 - 36
 - 37
 - 38
 - 39
 - 40
 - 41
 - 42
 - 43
 - 44
 - 45
 - 46
 - 47
 - 48
 - 49
 - 50
 - 51
 - 52
 - 53
 - 54
 - 55
 - 56
 - 57
 
                        static final String MIN_INTEGER = String.valueOf(Integer.MIN_VALUE);
  static final String MAX_INTEGER = String.valueOf(Integer.MAX_VALUE);
  static final String MIN_LONG = String.valueOf(Long.MIN_VALUE);
  static final String MAX_LONG = String.valueOf(Long.MAX_VALUE);
  static final int NS_INTEGER = 1;
  static final int NS_LONG = 2;
  /**
   * Проверяет, является ли передаваемая строка строковым представлением числа типа int (long)
   * @param s строка для проверки
   * @return <code>true</code>, если строка может быть распарсена как int (ling).
   * @see Integer#parseInt
   * @see Long#parseLong
   */
  private static boolean isNumber(String s, int NUMBER_SIZE) {
    String MIN_NUMBER = "", MAX_NUMBER = "";
    switch (NUMBER_SIZE) {
      case (NS_INTEGER):
        MIN_NUMBER = MIN_INTEGER;
        MAX_NUMBER = MAX_INTEGER;
      break;
      case (NS_LONG):
        MIN_NUMBER = MIN_LONG;
        MAX_NUMBER = MAX_LONG;
      break;
    }
    if (s == null) return false;
    final int len = s.length();
    boolean negative = false;
    int pos = len > 0 && (negative = s.charAt(0) == '-') ? 1 : 0;
    if (pos == len) return false;
    while (pos < len && s.charAt(pos) == '0') pos++; //пропустим 0
    if (pos == len) return true; // там 0
    // если длина заведомо больше, то и значение по-любому выходит за пределы
    if (negative && len - pos > MIN_NUMBER.length() - 1 || len - pos > MAX_NUMBER.length()) return false;
    // нужно проверять предельные значения
    boolean needCheckRange = negative && len - pos == MIN_NUMBER.length() - 1 || len - pos == MAX_NUMBER.length();
    if (needCheckRange) {
      final String rangeString = negative ? MIN_NUMBER : MAX_NUMBER;
      for (int i = negative? 1:0; pos<len; pos++,i++) {
        final char c = s.charAt(pos);
        char r = 0;
        if (c < '0' || c > '9' ||
            (needCheckRange && c > (r = rangeString.charAt(i))) ||
            ((needCheckRange &= c == r) && false))
          return false;
      }
    } else {
      for (;pos<len;pos++) {
        final char c = s.charAt(pos);
        if (c < '0' || c > '9')
          return false;
      }
    }
    return true;
  }
                                 
        
Хороший пример того, как не надо писать утилитные методы.
Такие методы годятся только в утиль.