Встречающ странное поведение с длиной.parseLong()

Я сталкиваюсь с довольно странным поведением с Long.parseLong()method при попытке извлечь число из строки.

Строка содержит несколько номеров, но только один (который мне нужен) находится в пределах вопросительных знаков, поэтому я извлекаю его с помощью regex, а затем пытаюсь разобрать 15-значное число в длинную переменную:

    Pattern p = Pattern.compile(""d+"");
    Matcher m = p.matcher(myString);
    while (m.find()) {
        String var1 = m.group();
        var1 = var1.replace(""", "");

        try {
            long var2 = Long.parseLong(var1);
            return var2;
        }
        catch (Exception e) {
            return -1L;
        }
    }
    return 0L;

Хотя я ожидаю, что он вернется var2или выдаст исключение, следующая строка, которая вызывается послеLong.parseLong(var1)return 0L, и я понятия не имею, почему. Я что-то упускаю?

Спасибо.

2 ответа

  1. Я только что запустил ваш код вот так:

    public static void main(String [] args) {
        String myString = "abc 350 \"123451234512345\"";
        System.out.println(doSth(myString));
    }
    
    public static long doSth(final String myString) {
        final Pattern p = Pattern.compile("\"\d+\"");
        final Matcher m = p.matcher(myString);
    
        while (m.find()) {
            String var1 = m.group().replace("\"", "");
    
            try {
                return Long.parseLong(var1);
            } catch (Exception e) {
                return -1L;
            }
        }
    
        return 0L;
    }
    

    И я получаю:

    123451234512345
    
    Process finished with exit code 0
    

    Это может быть связано с проблемой .classess файлы. Попробуйте перестроить проект (mvn clean / gradle clean / find . — введите f-name»*.класс » — exec rm-rf {} \;).

    Я полагаю, ваш .файл класса не соответствует коду .Java-файл.

  2. Код работает так, как и ожидалось при выводе возвращаемой части из while(m.find())цикла:

    Pattern p = Pattern.compile("\"\d+\"");
    Matcher m = p.matcher(myString);
    String var = "-1";
        while (m.find()) {
            var = m.group().replace("\"", "");
        }
    return Long.parseLong(var);
    

    Я не понимаю его, поскольку он работает при печати и не возвращается, и он также работает в цикле в Примере g-t. Если вы готовы подробнее рассказать об этом деле, я хотел бы прочитать.