Java扫描程序使用分隔符从csv读取并忽略endline

时间:2018-01-13 17:16:28

标签: java list java.util.scanner

代码:

public static void main(String[] args) throws Exception{
    Scanner scn = new Scanner(new File ("kektura.csv"));
    int kezd = 0;
    List <String> indul = new ArrayList<>();
    List <String> veg = new ArrayList<>();
    List <Double> hossz = new ArrayList<>();
    List <Integer> emel = new ArrayList<>();
    List <Integer> lejt = new ArrayList<>();
    List <Boolean> pecset = new ArrayList<>();
    kezd=scn.nextInt(); 
    scn.nextLine();
    while(scn.hasNextLine())
    {
        scn.useDelimiter(";");
        indul.add(scn.next());           
        veg.add(scn.next());            
        hossz.add(scn.nextDouble());           
        emel.add(scn.nextInt());            
        lejt.add(scn.nextInt());            
        if(scn.next()=="n")
        {
            pecset.add(Boolean.TRUE);             
        }
        else
        {
            pecset.add(Boolean.FALSE);             
        }
        scn.nextLine();
    }
    for(Object x : pecset)
    {
        System.out.println(x);
    }
    scn.close();
}

文件(它是一个csv文件,它有更多行,但它们是相同的模式):

192
Sumeg, vasutallomas;Sumeg, buszpalyaudvar;1,208;16;6;n
Sumeg, buszpalyaudvar;Mogyorosi-domb, geologiai bemutatohely;1,512;24;8;n
Mogyorosi-domb, geologiai bemutatohely;Sumegi bazaltbanya vasutallomas;1,576;13;43;n
Sumegi bazaltbanya vasutallomas;Sarvaly erdeszhaz, pecsetelohely;2,101;69;18;i

我读这个有问题。 阅读第一行,没关系。 但是第二行并不好,因为(我认为)分隔符读取直到(;)字符,但在行的末尾,那里不是(;)。 这一刻的最后一行,我写了scn.nextLine来读取\ n字符,但它不起作用。 我知道这是一种可能的方式,阅读线路并拆分它,但它是一个学校项目,老师告诉我们找出另一个解决方案。 有办法解决这个问题吗?

1 个答案:

答案 0 :(得分:0)

由于您的老师希望您找到其他解决方案,我建议使用BufferedReader以单行读取文件。然后,对于每一行,您可以使用String#split(),最后将各个部分转换为所需类型(Integer#parseInt()等)。

然而,由于这是一个家庭作业问题,我不会提供完整的例子。