Разделите строковые значения с разделителями в массиве на логические переменные - PullRequest
1 голос
/ 19 июня 2020

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

activites
Work | family | date | gaming | relax | good sleep | shopping   
Work | family | date | Nature | Crusin | reading | gaming | relax | good sleep | cooking | laundry  
family | date | movies & tv | gaming | sport | relax | medium sleep | cooking   
Work | family | date | Photography | gaming | relax | good sleep | medium sleep | cooking   
Work | family | date | Nature | reading | gaming | relax | good sleep | cleaning    

Я пытаюсь преобразовать каждое действие в логическую переменную, которая имеет свою собственную столбец как таковой, поэтому он указывает 0 за то, что действие не было выполнено в этот день, и 1 за выполнение действия. Это будет выглядеть примерно так:

Work   Family   Date   Gaming   Relax
1      1        0      1        0
1      1        1      0        0
0      0        1      0        1

1 Ответ

0 голосов
/ 02 июля 2020

Итак, в итоге я использовал свои знания Java для переформатирования данных. Сначала я разделил действия на их собственные переменные, каждая из которых содержала числовое (двоичное) значение, чтобы указать, было ли это действие выполнено в тот день. К качеству сна пришлось относиться отдельно, так что эта часть выглядит немного шаткой. Вот код, который дал правильный результат:

    public static void main(String[] args) throws FileNotFoundException {
        Scanner scan = new Scanner(new FileReader("activities.txt"));
        String[] actList = { "Work", "school", "family", "friends", "date", "nature", "crusin", "photography",
                "making music/piano", "movies & tv", "reading", "gaming", "sport", "relax", "sleep", "shopping", "cleaning",
                "cooking", "laundry" };
        int row = 0;
        while (scan.hasNextLine()) {
            row++;
            int col = 0;
            int activityNo = 0;
            int[] actValue = new int[actList.length];
            String pipeDelim = scan.nextLine();
            String[] actName = pipeDelim.split(" \\| ");
            int sleepTagsUsed = 0;
            while (activityNo < actName.length) {
                col = 0;
                for (String a : actName) {
                    if (a.contains("sleep")) {
                        col = 14;
                        if (a.equalsIgnoreCase("bad sleep") || a.equalsIgnoreCase("bad sleep\t")) {
                            if (col < actList.length) {
                                actValue[col] = 0;
                                if (sleepTagsUsed == 0) {
                                    col++;
                                }
                                sleepTagsUsed++;
                            } else {
                                break;
                            }
                            if (!(activityNo > actName.length)) {
                                activityNo++;
                            }
                        } else if (a.equalsIgnoreCase("medium sleep") || a.equalsIgnoreCase("medium sleep\t")) {
                            if (col < actList.length) {
                                actValue[col] = 1;
                                if (sleepTagsUsed == 0) {
                                    col++;
                                }
                                sleepTagsUsed++;
                            } else {
                                break;
                            }
                            if (!(activityNo > actName.length)) {
                                activityNo++;
                            }
                        } else if (a.equalsIgnoreCase("good sleep") || a.equalsIgnoreCase("good sleep\t")) {
                            if (col < actList.length) {
                                actValue[col] = 2;
                                if (sleepTagsUsed == 0) {
                                    col++;
                                }
                                sleepTagsUsed++;
                            } else {
                                break;
                            }
                            if (!(activityNo > actName.length)) {
                                activityNo++;
                            }
                        } else if (a.equalsIgnoreCase("sleep early") || a.equalsIgnoreCase("sleep early\t")) {
                            if (col < actList.length) {
                                actValue[col] = 3;
                                if (sleepTagsUsed == 0) {
                                    col++;
                                }
                                sleepTagsUsed++;
                            } else {
                                break;
                            }
                            if (!(activityNo > actName.length)) {
                                activityNo++;
                            }
                        } else {
                            if (col < actList.length) {
                                actValue[col] = -1;
                            } else {
                                break;
                            }
                            System.out.println("No sleep logged error");
                        }
                    } else {
                        int j = 0;
                        for (String i : actList) {
                            if (a.equalsIgnoreCase(i) || a.equalsIgnoreCase(i + "\t")) {
                                    actValue[col] = 1;
                                if (activityNo > actName.length) {
                                    break;
                                } else {
                                    activityNo++;
                                    break;
                                }
                            } else {
                                if (col < actList.length) {
                                    j++;
                                    if (j > col) {
                                        actValue[col] = 0;
                                        col++;
                                    }
                                } else {
                                    break;
                                }
                            }
                        }
                        col++;
                    }
                }

            }
            for (int p : actValue) {
                System.out.print(p + "\t");
            }
            System.out.println();
        }
        scan.close();
    }
...