我正在尝试将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”。我想知道是否可以将每辆车拆分成空白区域,以便它们可以单独分开。
答案 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,}");