从文本文件到arrayList

时间:2016-04-21 11:36:47

标签: java arraylist

我正在尝试将Text文件中的数据写入ArrayList。我有下面的代码。文本文件中的行具有以下格式:

#define create_ptr(__TYPE__) typedef std::shared_ptr<__TYPE__> __TYPE__ ## Ptr;

class Foo{
public:
};

create_ptr(Foo)

FooPtr foo;

例如:

Id
Car Manufacturer
Car Type
Colour
*blank line*

执行此操作24次,运行时正确显示信息,但列表大小为“1”。我想知道是否可以将每辆车拆分成空白区域,以便它们可以单独分开。

5 个答案:

答案 0 :(得分:2)

您目前只是按值逐个读取文件。可能值得考虑改为逐行读取文件。

所以你可以使用这样的方法:

String lineValue = "";

while (inFile1.hasNextLine()) {
  lineValue = inFile1.nextLine();

  if(lineValue.isEmpty()) {
    temps.add(token1);
    token1 = "";
  } else {
    token1 += lineValue;
  }
}

这将允许它向列表添加多个单独的字符串。您可能需要在文件末尾包含一个空格来添加最后一个字符串,或者添加一些额外的代码来检查它是否在文件的末尾。

答案 1 :(得分:1)

同意@Thomas。请遵循以下代码:

        Scanner inFile1 = new Scanner(new File("example.txt")); // don't use any delimiter 

        List<String> temps = new ArrayList<String>();
        String tokenTemp= "";


        while (inFile1.hasNextLine()) {
        tokenTemp = inFile1.nextLine();
        if(tokenTemp.isEmpty()){
            temps.add(token1);
            token1="";
        }
        else token1 += tokenTemp+" ";
    }

此处每行插入temps列表。

答案 2 :(得分:0)

这是因为正则表达式会立即读取整个文件。我修改了你的代码,

Scanner inFile1 = new Scanner(new File("example.txt"));
            //.useDelimiter(",\\s*");
List<String> temps = new ArrayList<String>();
while (inFile1.hasNext()) {
    token1 = inFile1.nextLine();
    temps.add(token1);
}

它有效。如果每个新值都以新行打印,则可以使用扫描程序类的nextLine()方法。

答案 3 :(得分:0)

我希望,此代码可以解决您的问题:

  `<div id ='test2'> </div>` #class of the body as default

答案 4 :(得分:0)

根据您发布的内容,我了解您将每辆车的详细信息与空行区分开来,每当出现两个新的行符号时,您可以将以下正则表达式模式分开(一行用于行尾,一行用于空行)

20
Vauxhall
Corsa
red (newline1)
(newline2)
19
Vauxhall
Corsa
blue(newline1)
(newline2)
18
Vauxhall
Corsa
White

这应该这样做:

Scanner inFile1 = new Scanner(new File("cars.txt")).useDelimiter("(\r\n){2,}");