[英]reading from file to arraylist
我有一個文件,其中包括用空格和線分隔的這些數字。
1 11 23 1 18 9 15 23 5
11 1 18 1 20 5 11 1
我想將它們放入ArrayList,一行放在一個ArrayList中(沒有空格,只有數字),另一行放在另一個ArrayList中。
我嘗試了許多方法,將數字加載到Char Array,String和Char Array(但指定了十進制數字),依此類推。
我的一段代碼:
Scanner plik1 = new Scanner( new File("plik1.txt") );
ArrayList<Integer> list = new ArrayList<Integer>();
while (plik1.hasNext()){
list.add(plik1.nextInt());
}
System.out.print("strin1 : " + list);
以及輸出中顯示的內容:
strin1 : [1, 11, 23, 1, 18, 9, 15, 23, 5, 11, 1, 18, 1, 20, 5, 11, 1]
但是,我希望它看起來像:
strin1 : [1, 11, 23, 1, 18, 9, 15, 23, 5]
strin2 : [11, 1, 18, 1, 20, 5, 11, 1]
您可以像這樣創建一個列表列表:
Scanner plik1 = new Scanner( new File("plik1.txt") );
ArrayList<ArrayList<Integer>> list = new ArrayList<ArrayList<Integer>>();
while (plik1.hasNextLine()){
String temp = plik1.nextLine();
String[] splitString = temp.split(" ");
ArrayList<Integer> tempList = new ArrayList<Integer>();
list.add(tempList);
for(int i = 0; i < splitString.length; i++)
{
tempList.add(Integer.parseInt(splitString[i]));
}
}
System.out.print("strin1 : " + list);
這是Java 8的簡單答案:
List<List<String>> result = Files.readAllLines(Paths.get("plik.text")).stream().map(s -> Arrays.asList(s.split(" "))).collect(Collectors.asList());
您的方法存在的問題是您僅創建了一個列表。
實現所需目標的一種簡單方法是使用BufferedReader
從文件中讀取行。 然后,對於讀取的每一行,您創建並填寫一個列表。 您可以將這些列表保存在另一個列表中以供參考。
List<List<String>> myLists = new ArrayList<List<String>>();
String line = null;
BufferedReader br = null;
try {
br = new BufferedReader(new FileReader("plik1.txt"));
while ((line = br.readLine()) != null) {
myLists.add(Arrays.asList(line.split(" ")));
}
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
// I've left it out for brevity but don't forget to close resources !
// print the lists in the format you need
int counter = 1;
for(List<String> list : myLists) {
System.out.println("strin" + counter + " : " + list);
}
您可以逐行讀取文件,並使用新的Scanner
解析每一行:
Scanner plik1 = new Scanner( new File("plik1.txt") );
ArrayList<Integer> list = new ArrayList<Integer>();
ArrayList<Integer> list2 = new ArrayList<Integer>();
// read first line
Scanner scan = new Scanner(plik1.nextLine());
while (scan.hasNext()){
list.add(scan.nextInt());
}
// read second line
scan = new Scanner(plik1.nextLine());
while (scan.hasNext()){
list2.add(scan.nextInt()); // second list
}
System.out.print("strin1 : " + list);
System.out.print("strin2 : " + list2);
不使用Scanners或BufferedReader的情況略有不同。 Java 7可以做到這一點
String plik1= new String(Files.readAllBytes(Paths.get("C:\\plik1")));
String[] lines = plik1.split("\r\n");
List<List<Integer>> intLists = new ArrayList<>();
for(int i=0; i<lines.length; i++) {
List<String> strList = Arrays.asList(lines[i].split(" "));
List<Integer> intList = new ArrayList<>();
for(String s : strList) {
intList.add(Integer.parseInt(s));
}
intLists.add(intList);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.