【问题标题】:BufferedReader to BigInteger variable [duplicate]BufferedReader 到 BigInteger 变量
【发布时间】:2017-05-14 15:31:12
【问题描述】:

所以我有一个很长的文本文件,使用 Scanner 加载它大约需要半小时,所以我试图切换到 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,但我无法让它正常工作。我该怎么做?

【问题讨论】:

  • add 将添加数字,因此您基本上是在计算 2+1+0=3。你为什么想要 210?
  • 你还能期待什么,num.add(new BigInteger(Line)); ?
  • 嗯,我试过了,shiftLeft 和其他一些东西,但没有任何效果
  • 你为什么要首先创建一个这样的巨型 BiInteger。我的猜测是,有一种更好的方法可以实现您想要实现的目标。你想达到什么目标?

标签: java bufferedreader


【解决方案1】:

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());

【讨论】:

  • 但是如果 OP 想要 BigInteger 怎么办?
  • @Kaushal28 考虑。
  • 现在这部分代码不起作用 'num = new BigInteger(s);'我应该如何改变这个?
  • @SamanthaClark :应该可以。什么不工作?
  • @SamanthaClark do num = new BigInteger(s.toString()) BigInteger 的构造函数不允许CharSequence,只有String
【解决方案2】:

要获取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);

【讨论】:

  • 在这里并没有太大的区别,但在这里你应该更喜欢StringBuilder 而不是String,因为Strings 是不可变的,并且会增加程序的开销。
  • 谢谢你,成功了:)
  • @SamanthaClark 你是欢迎的伙伴!请考虑@Shashwat 评论,您可以使用StringBuilder。如果有帮助,您可以接受答案:)
猜你喜欢
  • 2012-12-06
  • 1970-01-01
  • 2011-03-12
  • 1970-01-01
  • 2011-05-23
  • 1970-01-01
  • 2011-10-28
  • 1970-01-01
  • 2013-11-01
相关资源
最近更新 更多