使用扫描仪和定界符将文本文件读入数组列表

时间:2018-12-28 15:15:57

标签: java

我有一些作业需要我从使用“:”(冒号)作为分隔符的文本文件中读取。文件的内容是有关动物的信息,包括名称,高度和大小等。文件中的文本包含浮点数,整数和字符串,但是主要问题是在读取文件时它从下一行接收信息,这是因为每行所包含的最后一个字符串不是以“:”结尾,而是句号

文件:

Internship Notes

我首先使用名为s.hasNext的扫描程序将文本文件放入arraylist

使用分隔符时 s.useDelimiter(“ [:]”);

程序将打印出

“直到100年前,人类才知道它们的存在。 盐水鳄鱼”

不仅仅是“他们的存在直到大约100年前才为人类所知”。

我尝试像这样在分隔符中添加句号 scan.useDelimiter(“ [:.]”); 但是,当我这样做时,它就会与也带有“。”的花车混淆。

SELECT 
    [Employer Contact].Employer, 
    [Employer Type/Intern Functions].Type,  
    [Employer Type/Intern Functions].[Intern Functions/Responsibilities], 
    [Internship Notes].Date, 
    [Internship Notes].Specialist, 
    [Internship Notes].Notes
FROM 
    (
        [Employer Contact] LEFT JOIN [Internship Notes] ON 
        [Employer Contact].[Employer] = [Internship Notes].[Employer]
    ) 
    LEFT JOIN [Employer Type/Intern Functions] ON 
    [Employer Contact].[Employer] = [Employer Type/Intern Functions].[Employer]
WHERE 
    [Employer Contact].Employer = [Forms]![Employer Record Search]![cboChooseEmp] OR 
    [Forms]![Employer Record Search]![cboChooseEmp] IS NULL;
  

“直到100年前,人类才知道它们的存在。   盐水鳄鱼”

只有下一行信息不在前几行字符串中。 香港专业教育学院一直试图找出这2天,现在,我需要我所能获得的所有帮助。也许有一种方法可以忽略句号,对不起,我感到抱歉。

System.out.println(animalArr.get(7));

“直到100年前,人类才知道它们的存在。 盐水鳄鱼”

成为

“直到100年前,人类才知道它们的存在”。 基本上是tldr

2 个答案:

答案 0 :(得分:0)

您正在将定界符设置为使用“:”,它告诉.next()方法查找直到“:”为止的所有文本。您的情况是:

  

“直到100年前,人类才知道它们的存在。咸水鳄鱼”

我将使用.hasNextLine().nextLine()来获取文件中的每一行(因为每一行都有一个硬停止符)。然后使用myLine.split(":")获取该行中的每个字段。

答案 1 :(得分:0)

此代码解决了您的问题:

try {
    ArrayList<String> animalArr = new ArrayList();
    Scanner s = new Scanner(new File(dataPath));
    s.useDelimiter("[:]");  
    while (s.hasNext()) {
        String txt = s.next();
        if(txt.contains(".") && !txt.matches("-?\\d+(\\.\\d+)?")) {
            String txt1 = txt.substring(0, txt.lastIndexOf(".") + 1);
            String txt2 = txt.substring(txt.lastIndexOf(".") + 1, txt.length());
            animalArr.add(txt1.trim());
            animalArr.add(txt2.trim());
        } else {
            animalArr.add(txt);
        }
    }   
    for(String a : animalArr) {
        System.out.println(a);
    }
} catch(Exception e) {
    e.printStackTrace();
}

实时示例(可进行调整以显示不带文件的结果):