2014-02-07 1 views
1

Итак, у меня есть строка, которая была передана мне. Я исключил все не целочисленные символы, за исключением пробелов. Каждая строка имеет значение целого числа, некоторые строки у меня есть, иногда у меня два или даже три. Теперь мне нужно прочитать в каждом целое число и соответственно добавить их в список массивов. В настоящее время это то, что у меня есть:чтение строки int и добавление int к массиву

while(fileScanner.hasNextLine()){ 
     fileScanner.nextLine(); 
     line=lineReplacer.nextLine(); 
     String line2=line.replaceAll("[a-z]","").replaceAll("[A-Z]","").replaceAll(": ","").replaceAll(" ","").replaceAll(", ", " "); 
     specs.add(Integer.parseInt(line2)); 
    } 

я застрял на том, как добавить в каждом междунар, не получив ошибку, не зная, сколько Интс являются линия, которую я в настоящее время.

Редактировать: Ожидаемые значения будут такими, как: 2 2 2 или 12 14 11, или всего 10 или 29 30. Целойцы должны оставаться разделенными, потому что их необходимо добавить в массив. Единственным ограничением на входе является то, что это не более трех целых чисел.

+0

просьба указать Входные данные и ожидаемые выходные данные. – TheLostMind

+0

Почему бы просто не использовать 'Scanner.nextInt()'? – Henry

+0

Я не могу использовать функцию nextInt, потому что в ней все еще есть пробелы. – dfburke

ответ

0

nextInt отлично работает в этой ситуации, он пропускает белое пространство между целыми числами. Попробуйте, например:

import java.util.Scanner; 

public class Main { 

    public static void main(String[] args) { 
     Scanner fileScanner = new Scanner("1 2 23 4\n3"); 
     while (fileScanner.hasNextInt()) { 
      System.out.println(fileScanner.nextInt()); 
     } 
    } 

} 

Это дает выход:

1 
2 
23 
4 
3 
+0

Итак, я просто сделал тестовый класс, и вы абсолютно правы! хотя, когда я создаю список массивов, он пропускает индекс 1. Он просто добавляет «1», а затем «23». но он пропускает два и 4. Почему? – dfburke

+0

Кажется, вы вызываете nextInt дважды в цикле. Он будет читать следующее целое число, когда оно вызывается. – Henry

+0

Это достаточно просто, чтобы исправить, спасибо за это. Я не знаю, сколько времени мне понадобилось бы, чтобы понять, что nextInt пропускает пробелы. – dfburke

2

Попробуйте это:

String line="Hello 12 hi 458 h20 Bye 8"; 
String line2 = line.replaceAll("\\D+",""); 
System.out.println(line2); 

Выход:

12458208 

Вы можете добавить все значения в список как:

for(int i=0;i<line2.length();i++) 
{ 
    specs.add(Integer.parseInt(line2.charAt(i)+"")); 
} 
+0

Затем, который объединяет два или три отдельных целых числа в один, скажем, 2 3 5 в 235. – dfburke

+0

@dfburke Пожалуйста, посмотрите обновленный код. – Bhushan

1

Попробуйте это:

String line = "ABC 1000,snsdf 987"; 
    Pattern pattern = Pattern.compile("\\d+"); 
    Matcher matcher = pattern.matcher(line); 
    List<Integer> list = new ArrayList<Integer>(); 
    while (matcher.find()) { 
     String match = matcher.group(); 
     list.add(Integer.parseInt(match)); 
    } 

Вы можете преобразовать список в массив, если это необходимо:

Integer[] array = new Integer[list.size()]; 
    array = list.toArray(array); 
Смежные вопросы