Разделение массива на отдельные массивы с отдельными элементами из импортированных данных - PullRequest
0 голосов
/ 28 марта 2020

Например, это вводится в программу:

(a)

(! A; c)

(b;! c)

Мне нужно использовать один без; c прикрепленный к нему, например.

Моя идея состояла в том, чтобы все хранили в массиве, а затем каждый набор скобок разбивался на разные массивы с отдельными элементами. то есть он стал бы [[a], [! a, c], [b,! c]].

То, что было сказано выше, - это идея, которую я имел в виду. Это код, который я написал, который не работает хорошо. Я надеюсь, что то, что я пытаюсь сказать, понято, и я был бы признателен за помощь

Scanner scanClauses = new Scanner(new File(args[0]));

 System.out.println("\nSuccessfully read file!\n");

 ArrayList<ArrayList<String>> clauses = new ArrayList<>();
 ArrayList<String> query = new ArrayList<>();

 Scanner scan = new Scanner(System.in);
 scan.useDelimiter("\n");

 //To take KB and put it in an array
 while (scanClauses.hasNextLine()) {
       clauses.add(new ArrayList<>());
       for (ArrayList<String> c : clauses) {
           c.add(scanClauses.next());
           System.out.println(c);
       }
 }

1 Ответ

1 голос
/ 28 марта 2020

Проблема в том, что вы добавляете пустой ArrayList к clauses в следующей строке вашего кода:

clauses.add(new ArrayList<>());

Сделайте это следующим образом:

import java.io.File;
import java.io.FileNotFoundException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Scanner;

public class Main {
    public static void main(String[] args) throws FileNotFoundException {
        Scanner scan = new Scanner(new File("file.txt"));
        List<ArrayList<String>> clauses = new ArrayList<ArrayList<String>>();
        ArrayList<String> query;
        while (scan.hasNextLine()) {
            // Remove '(' and ')' from the line and then split it on ';' to get an array
            // of tokens. Then, convert the array to a new `ArrayList`. 
            query = new ArrayList<String>(Arrays.asList(scan.nextLine().replace("(", "").replace(")", "").split(";")));
            clauses.add(query);
        }
        System.out.println(clauses);
    }
}

Вывод:

[[a], [!a, c], [b, !c]]

Содержимое файла file.txt:

(a)
(!a;c)
(b;!c)
...