Как я могу поместить строку в строку ArrayList? - PullRequest
0 голосов
/ 25 апреля 2020

Я пытаюсь создать программу, в которой учитель может выставлять или изменять оценки учеников в CSV-файле.

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

Я хочу поместить строку в String Arraylist, а затем использовать ее с методом pattern.matches(), но я не знаю, как это сделать.

Вот как это выглядит:

Это для моего кода столбца

    BufferedReader br = new BufferedReader(new FileReader("project.csv"));
    while ((line = br.readLine()) != null) {
        String[] cols = line.split(",");
    }

Ответы [ 3 ]

0 голосов
/ 25 апреля 2020

А как насчет создания нового array и сохранения ваших данных с измененными значениями в новом массиве?

Примерно так:

BufferedReader br = new BufferedReader(new FileReader("project.csv"));
while ((line = br.readLine()) != null) {
    String[] cols = line.split(",");

Scanner in = new Scanner(System.in);
int subjectToGiveMark = in.nextInt(); // for creativity is 2
int mark = in.nextInt(); // which mark should be given 
final int size = cols.length; 
String[] finalResult = new String[size]; 
int index = 0;


while(index<finalResult.length ) {
    if (index==subjectToGiveMark) {
      finalResult[index]= String.valueOf(mark);
    } else {
    finalResult[index]=cols[index];
    }
    index++; 

}
0 голосов
/ 26 апреля 2020

Вам необходим двумерный массив, который представляет собой табличную структуру.

import java.io.BufferedReader;
import java.io.FileReader;
import java.util.ArrayList;
import java.util.List;

public class Main {
    public static void main(String[] args) {
        String line;
        List<String> dataLines = new ArrayList<String>();
        final int COLS = 6;
        try (BufferedReader br = new BufferedReader(new FileReader("project.csv"))) {
            br.readLine();// Read and ignore the header for this demo
            while ((line = br.readLine()) != null) {
                dataLines.add(line);
            }
            // Initialise data[][] with the data from project.csv
            String[][] data = new String[dataLines.size()][COLS];
            for (int i = 0; i < dataLines.size(); i++) {
                data[i] = dataLines.get(i).split("\\s+");// Split on space(s)
            }

            System.out.println(data[1][1] + "'s marks in Achievement (15) is " + data[1][3]);
            System.out.println(data[2][1] + "'s marks in Knowledge (25) is " + data[2][4]);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}

Вывод:

Sarah's marks in Achievement (15) is 13
Harry's marks in Knowledge (25) is 24

Содержимое project.csv :

Student Id  Student Name    Creativity (10) Achievement (15)    Knowledge (25)  Documentation (25)
F1233       Bill            8               12                  20              18
F2345       Sarah           9               13                  22              23
F3456       Harry           9               14                  24              24
0 голосов
/ 25 апреля 2020

Попробуйте,

Path path = Paths.get("project.csv");
List<String> lines = Files.readAllLines(path);
List<String> columns = Arrays.asList(lines.get(0).split(","));  //columns of csv
//get the rows in a list
List<List<String>> values = lines.stream()
        .skip(1).     //skip column
        .map(line -> Arrays.asList(line.split(",")))
        .filter(Objects::nonNull)
        .collect(Collectors.toList());
...