你如何将一个长整数字符串转换为BigInteger?

时间:2016-04-20 04:33:00

标签: java string biginteger

我被困在代码的这一部分上。我有一个存储在输入中的字符串。

String input = ("831346848 2162638190 2014846560 1070589609 326439737");

该字符串包含长整数。我试图通过将每个长整数转换为BigInteger来实现它们。例如,从字符串中,我需要这样做:

 BigInteger bi1= new BigInteger("831346848");

等等。输入字符串非常长,所以我需要把它放在某种循环中。在我暂时将它存储到bi1后,我需要执行b1.modPow(exp,mod)。然后对字符串中的每个长整数重复这些步骤。那部分我理解,但我困惑的部分是如何将输入字符串放在循环中,以便将它存储在bi1中。

长整数用空格分隔,字符串中的每个长整数都是不同的长度。

实施此方法的最佳方法是什么?

5 个答案:

答案 0 :(得分:6)

Java-8方式

List<BigInteger> bigIntegers = Stream.of(input.split(" "))
    .map(BigInteger::new)
    .map(bi -> bi.modPow(exp, bi))
    .collect(Collectors.toList());

答案 1 :(得分:5)

space拆分字符串,并将其存储在List BigInteger

String input = "831346848 2162638190 2014846560 1070589609 326439737";

List<BigInteger> bigIntegerList = new ArrayList<BigInteger>();

for(String value : input.split("\\s")){
     bigIntegerList.add(new BigInteger(value));
}

答案 2 :(得分:1)

String nums [] = input.split (" ");
for (String num : nums) {
  BigInteger bi1= new BigInteger(num);
  // do whatever
}

答案 3 :(得分:1)

BigInteger bi1;
for (String sbigint : input.split(" ")) {
    BigInteger b1 = new BigInteger(sbigint);
    bi1 = b1.modPow(exp, mod);
}

您描述的问题似乎遗漏了某些内容,bi1的方式将包含字符串中最后一个长整数的结果modPow

答案 4 :(得分:0)

你需要一个像“\ s +”这样的正则表达式,这意味着:只要遇到至少一个空格,就会拆分。完整的Java代码是:

try {
   List<BigInteger> bigList = new ArrayList<BigInteger>();
   for(String subStr : input.split("\\s+")){
      bigList.add(new BigInteger(subStr));
   }
} catch (Exception ex) {
    // 
}

如果您愿意,如果只有一个空格,您可以避免在“\ s +”中使用“+”符号,但这不是必需的。