Проверьте, можно ли перевести строку в Long без try-catch? - PullRequest
59 голосов
/ 02 апреля 2010

Long.parseLong("string") выдает ошибку, если строка не разбирается в long. Есть ли способ проверить строку быстрее, чем использовать try-catch? Спасибо

Ответы [ 14 ]

2 голосов
/ 02 апреля 2010

Я думаю, что это единственный способ проверить, является ли String действительным длинным значением. но вы можете реализовать для этого метод, имея в виду самое большое значение long.

0 голосов
/ 09 апреля 2019

Простая реализация для проверки целого числа, подходящего для long, будет:

    public static boolean isValidLong(String str) {
        if( str==null ) return false;
        int len = str.length();
        if (str.charAt(0) == '+') {
            return str.matches("\\+\\d+") && (len < 20 || len == 20 && str.compareTo("+9223372036854775807") <= 0);
        } else if (str.charAt(0) == '-') {
            return str.matches("-\\d+") && (len < 20 || len == 20 && str.compareTo("-9223372036854775808") <= 0);
        } else {
            return str.matches("\\d+") && (len < 19 || len == 19 && str.compareTo("9223372036854775807") <= 0);
        }
    }

Он не обрабатывает восьмеричный, префикс 0x или около того, но это редко требуется.

Для ускорения выражения ".match" легко кодировать в цикле.

0 голосов
/ 10 сентября 2018

Гуава Longs.tryParse ("строка") возвращает ноль вместо выдачи исключения в случае сбоя анализа. Но этот метод помечен как бета прямо сейчас.

0 голосов
/ 02 апреля 2010

Вы можете попробовать использовать регулярное выражение для проверки формы строки, прежде чем пытаться ее проанализировать?

...