2016-04-20 8 views
0

私のコードのこの部分に固執しています。私は入力に格納されている文字列を持っています。long整数の文字列をBigIntegerに変換する方法はありますか?

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

文字列には長い整数が含まれます。私はそれぞれの長い整数をBigIntegerに変換することによってそれらを実装しようとしています。たとえば、文字列から、私はこれを行う必要があります:

BigInteger bi1= new BigInteger("831346848"); 

などのように。入力文字列は非常に長いので、私はこれを何らかのループに入れる必要があります。一時的にbi1に保存した後、b1.modPow(exp、mod)を実行する必要があります。次に、文字列内の各長整数に対して手順を繰り返します。その部分は分かりますが、混乱している部分は入力文字列をループに入れてbi1に格納する方法です。

長い整数は空白で区切られ、文字列の各長整数は異なる長さです。

これを実装する最良の方法は何ですか?

+1

ここで話す弦の大きさはどれくらいですか?それはStringオブジェクトに格納することができますか、または巨大なファイルを扱っていますか? –

+0

巨大な文字列ではなく、ちょうど100個の長い整数が入っています。 –

答えて

1

spaceによって

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

分割文字列を試してみて、あなたは説明した問題は何かが足りないように思えListBigInteger

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

素早く対応してくれてありがとうございます。なぜ私はこれを考えなかったのか分からなかった! –

+0

\\ sの代わりに\\ sを使用します。必要に応じてスペースが1つしかない場合は、「+」記号を避けることができます。 – KJEjava48

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

に保管し、方法は、それはbi1がしますです文字列の最後の長い整数の結果はmodPowです。少なくとも一つの空白に遭遇するたびに分割:

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

のJava-8の方法は、あなたは意味 "\ S +" のような正規表現を必要とします。完全なJavaコードは次のとおりです。

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

一つだけのスペースが必要であればそこにあるが、その必要はない場合は、「\ S +」の「+」記号を回避することができます。

+1

また、 '.map(BigInteger :: new)'を使うこともできます。+1 –

0

+0

明確な目的がない限り、 'Exception'をキャッチしません。 –

+0

コンストラクタは 'NumberFormatException'をスローする可能性がありますか? 実際には、ループ内でtry-catchを使用して、例外が問題の文字列をスキップし、残りのループを継続するようにします。 – samiunn

関連する問題