#java #loops #csv #split #format
Вопрос:
Я просто пытаюсь распечатать файл csv в формате, показанном ниже. Как мне это сделать?
csv-файл
history,A,math,B,chemistry,A,geo,C, art,B,literature,A,history,C,physics,A
public class readCsv (){ public static void main (String [] args){ String path = "file.csv"; Scanner in = new Scanner (new FileReader (path)); while (in.hasNextLine()){ String string = in.nextLine(); String [] token = string.split(","); String class = token [0] token [2] token [4] token [6] ; String grade = token [1] token [3] token [5] token [7]; //prints the output System.out.print(class grade); } }
Выходной ток —
history math chemistry geo art literature history physics ABACBACA
Желаемый результат —
History - A Math - B Chemistry - A Geo - C
и так далее….
Ответ №1:
String class = token [0] token [2] token [4] token [6] ; String grade = token [1] token [3] token [5] token [7];
Это твоя проблема. Вы должны создать 2 массива, один для класса и один для оценки. Поскольку класс находится на четных местах, а оценка-на нечетных, вам следует просмотреть массив маркеров и проверить индекс каждого элемента. Если индекс четный, переместите маркер элемента[индекс] в массив классов. Если он нечетный, переместите его в массив оценок. Затем выполните цикл через один из массивов и просто выведите класс[индекс] — Класс[индекс]. Вот какой-то псевдокод.
Array Class Array Grade for i=0, i lt; length of array token (token.length?), i if i % 2 == 0 add token[i] to class else add token[i] to grade for i=0 i lt; length of array grade (or class), i console.out(class[i] - grade[i]
Что происходит, так это то, что вы получаете класс массива = [История, математика] и класс массива = [A, B] (примеры значений). Затем вы просматриваете один из массивов, и, поскольку они имеют одинаковую длину, индекс 0 класса массива и индекс 0 класса массива являются историей и A. Затем вы просто распечатываете их.
Ответ №2:
При повторном объединении токенов (
) запятые будут удалены.
for (int i = 0; i lt; token.length/2; i) { System.out.println(token[2*i] " - " token[2*i 1]); }
println
печатает новую строку в конце, и только тогда вы увидите результат.
Каждая пара токенов класса и класса имеет четный/нечетный индекс.