簡體   English   中英

Java,如何讀取包含多行不同數字整數的.txt文件

[英]java, how to read a .txt file that have multiple lines of different numbers of integers

我有一個.txt文件,每一行都是這樣的格式

1 2,10 3,20

2 6,87

該文件實際上代表一個圖形,第1行表示頂點1的邊指向頂點2,長度為10,頂點1也具有指向邊的頂點到頂點3,長度為20。第2行表示頂點2的頂點只有一個方向。邊到頂點6,長度為87。

我想做Dajkstra的最短路徑算法。 我不想定義頂點類,邊緣類等,相反,我想將每條線存儲到二維數組中,以便通過使用索引可以獲取圖形信息。 如果是在python中,我會將整個文件存儲到嵌套列表[[((2,10)(3,20)],[(6,87)],...]中,這樣就無需創建頂點,邊緣上課,我可以通過為列表建立索引來輕松訪問所有必要的圖形信息。

我的問題是,如何用Java做到這一點? 2-D數組不好,因為每行可能具有不同數量的整數。 ArrayList可能不錯,但是如何有效地將整個txt文件讀入此類arraylist?

    ArrayList<ArrayList<Integer>> graph = new ArrayList<ArrayList<Integer>>(); 

    try{

            Scanner sc = new Scanner(new File("a.txt"));               
            while(sc.hasNextLine()){
            String line= sc.nextLine();             
            ArrayList<Integer> vertex = new ArrayList<Integer>();               
            Scanner lineContents = new Scanner(line).useDelimiter("\\D"); //"\\D" means any none digit

            while (lineContents.hasNext()) {
                    vertex.add(lineContents.nextInt());
            }

            graph.add(vertex);
            lineContents.close();
        }
        sc.close();
    }

試試這個方法:

public Map<Integer, Map<Integer, Integer>> process(String filePath) throws IOException {
    Map<Integer, Map<Integer, Integer>> graph = new HashMap<>();

    Files.lines(new File(filePath).toPath())
            .map(line -> line.split(" "))
            .map(Arrays::asList)
            .forEachOrdered(elements -> {
                int vertexId = parseInt(elements.get(0));

                Map<Integer, Integer> vertexMap = new HashMap<>();
                elements.subList(1, elements.size()).stream()
                        .map(element -> element.split(","))
                        .map(Arrays::asList)
                        .forEach(pair -> vertexMap.put(parseInt(pair.get(0)), parseInt(pair.get(1))));

                graph.put(vertexId, vertexMap);
            });


    return graph;
}

我返回了一個Map而不是List因為按索引工作是一種不好的做法,並且您獲得了相同的功能。

另請注意,這未經測試-可能無法正常工作,但我認為可以。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM