чтение из файла в архив

1

У меня есть файл, который включает эти числа, разделенные пробелами и строкой.

1 11 23 1 18 9 15 23 5
11 1 18 1 20 5 11 1

Я хочу поместить их в ArrayList, одну строку в одном ArrayList (без пробелов, только числа) и другую в другом ArrayList.

Я пытался сделать это по-разному, загружая числа в Char Array, в String, а затем в Char Array (но десятичные числа были разделены) и т.д.

Мой фрагмент кода:

Scanner plik1 = new Scanner( new File("plik1.txt") );

ArrayList<Integer> list = new ArrayList<Integer>();

    while (plik1.hasNext()){
        list.add(plik1.nextInt());
    }

    System.out.print("strin1 : " + list);

и что показывает в выводе:

strin1 : [1, 11, 23, 1, 18, 9, 15, 23, 5, 11, 1, 18, 1, 20, 5, 11, 1]

Однако я хочу, чтобы это выглядело так:

strin1 : [1, 11, 23, 1, 18, 9, 15, 23, 5]
strin2 : [11, 1, 18, 1, 20, 5, 11, 1]
Теги:
arraylist

5 ответов

1

Вы можете сделать список списков примерно так:

Scanner plik1 = new Scanner( new File("plik1.txt") );

ArrayList<ArrayList<Integer>> list = new ArrayList<ArrayList<Integer>>();

while (plik1.hasNextLine()){
    String temp = plik1.nextLine();
    String[] splitString = temp.split(" ");
    ArrayList<Integer> tempList = new ArrayList<Integer>();
    list.add(tempList);
    for(int i = 0; i < splitString.length; i++)
    {
       tempList.add(Integer.parseInt(splitString[i]));
    }
}

System.out.print("strin1 : " + list);
1

Вот, что java 8 простой ответ для этого:

List<List<String>> result = Files.readAllLines(Paths.get("plik.text")).stream().map(s -> Arrays.asList(s.split(" "))).collect(Collectors.asList());
0

Вы можете читать файл по строкам и анализировать каждую строку с помощью нового Scanner:

Scanner plik1 = new Scanner( new File("plik1.txt") );

ArrayList<Integer> list = new ArrayList<Integer>();
ArrayList<Integer> list2 = new ArrayList<Integer>();

// read first line
Scanner scan = new Scanner(plik1.nextLine());
while (scan.hasNext()){
    list.add(scan.nextInt());
}

// read second line
scan = new Scanner(plik1.nextLine());
while (scan.hasNext()){
    list2.add(scan.nextInt()); // second list
}

System.out.print("strin1 : " + list);
System.out.print("strin2 : " + list2);
0

Небольшое изменение без использования сканеров или BufferedReaders. Java 7 может сделать это

String plik1= new String(Files.readAllBytes(Paths.get("C:\\plik1")));
String[] lines = plik1.split("\r\n");
List<List<Integer>> intLists = new ArrayList<>();
for(int i=0; i<lines.length; i++) {
   List<String> strList = Arrays.asList(lines[i].split(" "));
   List<Integer> intList = new ArrayList<>();
   for(String s : strList) {
      intList.add(Integer.parseInt(s));
   }
   intLists.add(intList);
}
0

Проблема с вашим подходом заключается в том, что вы создаете только один список.

Легкий способ добиться того, что вы хотите, - использовать BufferedReader для чтения строк из файла. Затем для каждой прочитанной строки вы создаете и заполняете список. Вы можете сохранить эти списки в другом списке для справки.

List<List<String>> myLists = new ArrayList<List<String>>();
String line = null;
BufferedReader br = null;
try {
    br = new BufferedReader(new FileReader("plik1.txt"));
    while ((line = br.readLine()) != null) {
        myLists.add(Arrays.asList(line.split(" ")));      
    } 
} catch (FileNotFoundException e) {
    e.printStackTrace();
} catch (IOException e) {
    e.printStackTrace();
}      
// I've left it out for brevity but don't forget to close resources !

// print the lists in the format you need
int counter = 1;
for(List<String> list : myLists) {
    System.out.println("strin" + counter + " : " + list);
}

Ещё вопросы

Сообщество Overcoder
Наверх
Меню