BufferedReader в переменную BigInteger

Итак, у меня очень длинный текстовый файл, и использование сканера для загрузки занимает около получаса, поэтому я пытаюсь переключиться на BufferedReader, и это код, который у меня есть прямо сейчас

public static void main(String[] args) {
    // TODO Auto-generated method stub
    BufferedReader Br1 = null;
    BigInteger num = new BigInteger ("0");
    String Line = "";
    try {
        Br1 = new BufferedReader (new FileReader("text.txt"));
        System.out.println("Read line method");
        Line = Br1.readLine();
        while(Line != null) {
            num = num.add(new BigInteger(Line));
            System.out.println(Line);
            Line = Br1.readLine();
        }

        System.out.println("number " + num);
    } catch (IOException ioe) {System.out.println("error");}

}

Чтобы проверить это, я создал текстовый файл 2 1 0, в котором все числа находятся в отдельных строках.

Я хочу, чтобы он дал мне BigInteger 210, но вместо этого он дает мне 3, я пробовал возиться с различными способами добавления к BigInteger, но я не могу заставить его работать правильно. Как мне это сделать?


person Samantha Clark    schedule 14.05.2017    source источник
comment
add добавит числа, так что вы в основном вычисляете 2 + 1 + 0 = 3. Зачем вам 210?   -  person SilverNak    schedule 14.05.2017
comment
Чего еще вы ожидаете от num.add (new BigInteger (Line)); ?   -  person Manish Kumar Sharma    schedule 14.05.2017
comment
Ну, я попробовал и shiftLeft, и еще пару вещей, но ничего не сработало.   -  person Samantha Clark    schedule 14.05.2017
comment
Почему вы вообще хотите создать такой гигантский BiInteger? Я предполагаю, что есть лучший способ делать то, чего вы хотите достичь. Чего ты хочешь добиться?   -  person JB Nizet    schedule 14.05.2017


Ответы (2)


BigInteger, как следует из названия, похож на Integer. В Integers 1+2+0 будет 3, а не 120. Если это то, что вы хотите, используйте StringBuilder, например

StringBuilder s = new StringBuilder("");
while(Line != null) {
    s.append(Line);
    Line = Br1.readLine();
}

Если вы хотите, чтобы это было BigInteger, сделайте

BigInteger num = new BigInteger(s.toString());
person dumbPotato21    schedule 14.05.2017
comment
Но что, если OP хочет BigInteger? - person Kaushal28; 14.05.2017
comment
@ Kaushal28 считается. - person dumbPotato21; 14.05.2017
comment
Теперь эта часть кода не работает 'num = new BigInteger (s);' Как мне это изменить? - person Samantha Clark; 14.05.2017
comment
@SamanthaClark: Это должно сработать. Что не работает? - person Manish Kumar Sharma; 14.05.2017
comment
@SamanthaClark do num = new BigInteger(s.toString()) Конструктор BigInteger не допускает CharSequence, только String. - person dumbPotato21; 14.05.2017
comment
Это исправило это, большое спасибо за вашу помощь - person Samantha Clark; 14.05.2017
comment
@SamanthaClark Если это помогло, вы можете выбрать ответ с помощью кнопок слева. - person dumbPotato21; 14.05.2017
comment
Я нажал зеленую стрелку, надеюсь, что выбрал ваш ответ. Кроме того, это имело неожиданный побочный эффект, резко ускорив мою программу! : D - person Samantha Clark; 14.05.2017
comment
Ну не зря, забыл поменять из загрузки тестового примера, подумал странно лол - person Samantha Clark; 14.05.2017

Чтобы получить 210, сначала добавьте все символы в String, а затем преобразуйте их в BigInteger, как показано ниже:

String number;
while(Line != null) {
    //num = num.add(new BigInteger(Line));
    number += Line;
    System.out.println(Line);
    Line = Br1.readLine();
}
num = new BigInteger(number);
person Kaushal28    schedule 14.05.2017
comment
здесь не имеет большого значения, но вы должны предпочесть StringBuilder вместо String, учитывая, что Strings являются неизменяемыми, и добавляйте накладные расходы к программе. - person dumbPotato21; 14.05.2017
comment
Спасибо, что помогло :) - person Samantha Clark; 14.05.2017
comment
@SamanthaClark Ты добро пожаловать, дружище! Пожалуйста, примите во внимание комментарий @Shashwat, и вы можете использовать StringBuilder. Можете принять ответ, если это помогло :) - person Kaushal28; 14.05.2017