.CSV以逗号分隔

时间:2018-08-31 03:22:04

标签: java arrays

package books;

 import java.awt.List;
 import java.io.BufferedReader;
 import java.io.File;
 import java.io.FileNotFoundException;
 import java.io.FileReader;
 import java.io.IOException;
 import java.util.ArrayList;

 public class Book implements Comparable<Book>{

private String title;
private String author;
private int year;

public Book(String title, String author, int year){
    this.title = title;
    this.author = author;
    this.year = year; 
}

public String getTitle() {
    return title; 
}
public String getAuthor() {
    return author;
}
public int getYear() {
    return year;
}
 @Override
public String toString() {
    return title + author + "("+ year + ")"; 
}
public static void getList(String file) throws IOException {
    try {
        ArrayList<Book> books= new ArrayList<Book>();
        FileReader fr = new FileReader (file);
        BufferedReader br = new BufferedReader(fr);
        String line;

        while((line=br.readLine())!=null) {
            String [] entries =line.split(",");
            //int [] entrie=line.split(",");
            Book book = new Book( title[0], author [1], year[2]);

            System.out.println(line);
        }

    } catch (FileNotFoundException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

}

public static void main( String [] args ) throws IOException {
    getList("books (2).csv");

}

我找不到答案,所以也许你们可以帮帮我,但我试图将书名,作者和年份的列表分开,然后按字母顺序排列。我试图将它们放入数组,但我认为我没有正确使用构造函数或其他东西。你有什么想法吗?

3 个答案:

答案 0 :(得分:0)

您需要使用得到的"_geoloc":{"lat":xx.xxx,"lng":-xx.xxx} 来构建lat

lng

答案 1 :(得分:0)

您需要使用entries[]数组中的元素来构造每个Book对象:

while ((line = br.readLine()) != null) {
    String [] entries = line.split(",");
    Book book = new Book(entries[0], entries[1], Integer.parseInt(entries[2]));
    books.add(book);
}

然后,假设您使用的是Java 8,则可以按标题直接对列表进行排序:

books.sort(Comparator.comparing(Book::getTitle,
    Comparator.nullsFirst(Comparator.naturalOrder())));

答案 2 :(得分:0)

在您的代码上,您将String的3个拆分部分发送给构造函数,但是year应该是int。将其也更改为String即可使用。

您继承了Comparable接口,但是缺少比较功能,因此必须对其进行定义。

您的课程未关闭,请在末尾加上}

如果您的图书开始阅读,但阅读数据错误,则是因为:

    while((line=br.readLine())!=null) {
        String [] entries =line.split(",");
        //int [] entrie=line.split(",");
        Book book = new Book( title[0], author [1], year[2]);

        System.out.println(line);
    }

您使用的是对csv的幼稚理解。格式如下:https://tools.ietf.org/html/rfc4180#section-2

还有一个解析它的教程:https://www.mkyong.com/java/how-to-read-and-parse-csv-file-in-java/

如果您整理的csv文件与您解析的格式匹配,则不会有问题。