Есть намного более быстрые способы разбора длиннее, чем Long.parseLong . Если вы хотите увидеть пример метода, который не оптимизирован, то вам стоит взглянуть на parseLong:)
Вам действительно нужно учитывать "цифры", которые не являются ASCII?
Вам действительно нужно сделать вызовы нескольких методов , передавая радикс даже в том случае, если вы, вероятно, анализируете базу 10?
:)
Использование регулярного выражения - не самый лучший способ: сложнее определить, является ли ваш номер слишком большим для длинного: как вы используете регулярное выражение, чтобы определить, что 9223372036854775807 можно анализировать для длинного, а 9223372036854775907 - нет?
Тем не менее, ответ на очень быстрый метод длинного анализа - это конечный автомат, и это не имеет значения, хотите ли вы проверить, является ли он анализируемым или анализировать его. Проще говоря, это не универсальный конечный автомат, принимающий сложные регулярные выражения, а жестко закодированный.
Я могу написать вам метод, который анализирует long, и другой, который определяет, можно ли анализировать long, который полностью превосходит Long.parseLong () .
Теперь, что вы хотите? Государственный метод тестирования? В этом случае метод тестирования состояния может быть нежелателен, если вы хотите избежать вычислений в два раза дольше.
Просто оберните ваш звонок в попытку / поймать.
и , если вы действительно хотите что-то быстрее, чем Long.parseLong по умолчанию, напишите такое, что с учетом вашей проблемы: база 10, если вы база 10, не проверяя цифры за пределами ASCII (потому что вы, вероятно, не интересуетесь японским «итчи-ни-йон-го» и т.д.).