docs: public static long indexFromString(String str)
      {
          // The length of the decimal string representation of
          //  Integer.MAX_VALUE, 2147483647
          final int MAX_VALUE_LENGTH = 10;
  
          int len = str.length();
          if (len > 0) {
              int i = 0;
              boolean negate = false;
              int c = str.charAt(0);
              if (c == '-') {
                  if (len > 1) {
                      c = str.charAt(1);
                      if (c == '0') return -1L; // "-0" is not an index
                      i = 1;
                      negate = true;
                  }
              }
              c -= '0';
              if (0 <= c && c <= 9
                  && len <= (negate ? MAX_VALUE_LENGTH + 1 : MAX_VALUE_LENGTH))
              {
                  // Use negative numbers to accumulate index to handle
                  // Integer.MIN_VALUE that is greater by 1 in absolute value
                  // then Integer.MAX_VALUE
                  int index = -c;
                  int oldIndex = 0;
                  i++;
                  if (index != 0) {
                      // Note that 00, 01, 000 etc. are not indexes
                      while (i != len && 0 <= (c = str.charAt(i) - '0') && c <= 9)
                      {
                          oldIndex = index;
                          index = 10 * index - c;
                          i++;
                      }
                  }
                  // Make sure all characters were consumed and that it couldn't
                  // have overflowed.
                  if (i == len &&
                      (oldIndex > (Integer.MIN_VALUE / 10) ||
                       (oldIndex == (Integer.MIN_VALUE / 10) &&
                        c <= (negate ? -(Integer.MIN_VALUE % 10)
                                     : (Integer.MAX_VALUE % 10)))))
                  {
                      return 0xFFFFFFFFL & (negate ? index : -index);
                  }
              }
          }
          return -1L;
      }