2016-04-20 2 views
0

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

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

Строка содержит длинные целые числа. Я пытаюсь реализовать их, преобразовывая каждое длинное целое в BigInteger. Например, из строки мне нужно сделать это:

и так далее. Строка ввода очень длинная, поэтому мне нужно поставить ее в какой-то цикл. после того как я временно сохраню его в bi1, мне нужно выполнить b1.modPow (exp, mod). Затем повторите шаги для каждого длинного целого в строке. Эта часть, которую я понимаю, но часть, с которой я запутался, заключается в том, как поместить входную строку в цикл, чтобы она сохранила ее в bi1.

Длинные целые числа разделены пробелом, и каждое длинное целое число в строке имеет разную длину.

Каков наилучший способ реализации этого?

+1

Насколько велика строка, мы говорим здесь? Может ли он храниться в объекте String или вы работаете с огромным файлом? –

+0

его не огромная строка, просто содержит около 100 длинных целых чисел. –

ответ

1

попробовать

String nums [] = input.split (" "); 
for (String num : nums) { 
    BigInteger bi1= new BigInteger(num); 
    // do whatever 
} 
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

Спасибо за быстрый ответ, и это отлично работает! Не знал, почему я об этом не думал! –

+0

Используйте \\ s + вместо \\ s. Вы можете избежать знака «+» в «\ s +», если вам нужно только одно пространство, но это необязательно. – KJEjava48

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

Проблема вы описали, кажется, что-то отсутствует, как это bi1 будет введите результат modPow для последнего длинного целого числа в вашей строке.

5

на языке Java 8 способ

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

Вы также можете использовать '.map (BigInteger :: new)' +1 –

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 +», если только одно место есть, если вам нравится, но его не нужно.

+0

Я бы не поймал «Исключение», если бы не было ясной цели. –

+0

Поскольку конструктор может вызывать 'NumberFormatException'? На самом деле я бы использовал try-catch только внутри цикла, чтобы исключение пропустило только строку-нарушитель и продолжало остальную часть цикла. – samiunn

Смежные вопросы