Java - Чтение текстового файла в виде целого числа и разбиение каждой строки на массив - PullRequest
0 голосов
/ 26 апреля 2018

У меня есть такой текстовый файл:

1  2
1  4
1  5
2  3
2  6
3  6
4  5
4  7
5  7
7  8
7  9
8  10
9  10

Итак, я хочу разбить каждое целое число и поместить в массив

        Path objPath = Paths.get("graph.txt");
        if (Files.exists(objPath)){

            File objFile = objPath.toFile();
            try(BufferedReader in = new BufferedReader(
                    new FileReader(objFile))){
                String line = in.readLine();

                while(line != null){


                    String[] stringArray = line.split("\\s+");
                    int[] intArray = new int[stringArray.length];
                    for (int i = 0; i < stringArray.length; i++) {
                        String numberAsString = stringArray[i];
                        intArray[i] = Integer.parseInt(numberAsString);
                    }
                    BridgeInGraph graph_obj = new BridgeInGraph(11);
                    graph_obj.add_edges_to_vertex(intArray[0], intArray[1]);
                    graph_obj.add_edges_to_vertex(intArray[2], intArray[3]);
                    .
                    .
                    .

                    System.out.println("Bridges in  Graphs ");
                    graph_obj.getCutVertices();
                    System.out.println("Points:");
                    graph_obj.AP();

                    line = in.readLine();
                }

            }
            catch(IOException e){

                System.out.println(e);
            }

        }
        else
        {
            System.out.println(
                    objPath.toAbsolutePath() + " doesn't exist");
        }

Я написал этот код, но что-то не так.

intArray [0] - все первые целые числа intArray [1] - все вторые целые числа

Но я спросил intArray [0] = 1 intArray [1] = 2 intArray [2] = 1 intArray [3] = 4 ... intArray [25] = 10

Как я могу это сделать? Некоторая помощь:)

Редактировать: я собираюсь использовать intArray в качестве параметра

Edit2: я исправил непонятную часть кода

Edit3: Спасибо за полезное кодирование @xagaffar. Другое дело, что если 11 находится в верхней части файла, как мы можем это сделать вместо BridgeInGraph graph_obj = new BridgeInGraph(11);

11
1  2
1  4
1  5
2  3
2  6
3  6
4  5
4  7
5  7
7  8
7  9
8  10
9  10


BridgeInGraph graph_obj = new BridgeInGraph(11);
//BridgeInGraph graph_obj = new BridgeInGraph(stringArray[x]);

        Path objPath = Paths.get("graph.txt");
        if (Files.exists(objPath)){

            File objFile = objPath.toFile();
            try(BufferedReader in = new BufferedReader(
                    new FileReader(objFile))){
                String line = in.readLine();

                while(line != null){

                    String[] linesFile = new String[] {line};

                    String[] stringArray = line.split("\\s+");


                    graph_obj.add_edges_to_vertex(
                            Integer.parseInt(stringArray[0]),
                            Integer.parseInt(stringArray[1]));

                    line = in.readLine();
                }
                System.out.println("Bridges in  Graphs ");
                graph_obj.getCutVertices();
                System.out.println("Points:");
                graph_obj.AP();
            }
            catch(IOException e){

                System.out.println(e);
            }
        }
        else
        {
            System.out.println(
                    objPath.toAbsolutePath() + " doesn't exist");
        }

Ответы [ 3 ]

0 голосов
/ 26 апреля 2018
    Path objPath = Paths.get("graph.txt");
    if (Files.exists(objPath)){
        File objFile = objPath.toFile();
        try(BufferedReader in = new BufferedReader(
                new FileReader(objFile))){
            String line = in.readLine();
            List<Integer> numbers = new ArrayList<>();

            while(line != null){
                String[] stringArray = line.split("\\s+");
                for (int i = 0; i < stringArray.length; i++) {
                    String numberAsString = stringArray[i];
                    numbers.add(Integer.parseInt(numberAsString));
                }

                line = in.readLine();
            }

        }
        catch(IOException e){
            System.out.println(e);
        }

    }
    else
    {
        System.out.println(
                objPath.toAbsolutePath() + " doesn't exist");
    }
0 голосов
/ 26 апреля 2018

Первая проблема заключается в том, что вы объявляете свой obj_graph внутри цикла, вы в основном создаете новый объект в каждом цикле. Объявите это вне цикла.

Вторая проблема заключается в том, что вы обращаетесь к элементам массива (intArray [2], intArray [3]), которых нет в нем.

Это должно решить вашу проблему.

    BridgeInGraph graph_obj = new BridgeInGraph(11);

    Path objPath = Paths.get("graph.txt");
    if (Files.exists(objPath)) {

        File objFile = objPath.toFile();
        try (BufferedReader in = new BufferedReader(
                new FileReader(objFile))) {
            String line = in.readLine();

            while (line != null) {

                String[] stringArray = line.split("\\s+");
                graph_obj.add_edges_to_vertex(
                       Integer.parseInt(stringArray[0]),
                       Integer.parseInt(stringArray[1]));

                line = in.readLine();
            }

        } catch (IOException e) {

            System.out.println(e);
        }

    } else {
        System.out.println(
                objPath.toAbsolutePath() + " doesn't exist");
    }
0 голосов
/ 26 апреля 2018

Вы можете использовать Scanner, он содержит методы для чтения nextInt():

public static void main(Strin... arg) {
    int[] numbers = readNumbers(new FileInputStream(new File("graph.txt")));
}

public static int[] readNumbers(InputStream in) {
    Scanner scan = new Scanner(in);
    List<Integer> numbers = new ArrayList<>();

    while (scan.hasNext())
        numbers.add(scan.nextInt());

    return toIntArray(numbers);
}

private static int[] toIntArray(List<Integer> numbers) {
    int i = 0;
    int[] arr = new int[numbers.size()];

    for (int num : numbers)
        arr[i++] = num;

    return arr;
}
...