区切り文字を使用した経験がほとんどなく、データがコンマ( "、")で区切られた単一行に格納されている複数のオブジェクトを格納するテキストファイルを読み取る必要があります。次に、個別の文字列を使用して、arraylistに追加される新しいオブジェクトを作成します。
Amadeus,Drama,160 Mins.,1984,14.83
As Good As It Gets,Drama,139 Mins.,1998,11.3
Batman,Action,126 Mins.,1989,10.15
Billy Elliot,Drama,111 Mins.,2001,10.23
Blade Runner,Science Fiction,117 Mins.,1982,11.98
Shadowlands,Drama,133 Mins.,1993,9.89
Shrek,Animation,93 Mins,2001,15.99
Snatch,Action,103 Mins,2001,20.67
The Lord of the Rings,Fantasy,178 Mins,2001,25.87
Scannerを使用してファイルを読み取っていますが、no line foundエラーが発生し、ファイル全体が1つの文字列に格納されます。
Scanner read = new Scanner (new File("datafile.txt"));
read.useDelimiter(",");
String title, category, runningTime, year, price;
while (read.hasNext())
{
title = read.nextLine();
category = read.nextLine();
runningTime = read.nextLine();
year = read.nextLine();
price = read.nextLine();
System.out.println(title + " " + category + " " + runningTime + " " +
year + " " + price + "\n"); // just for debugging
}
read.close();
Read.nextLine()の代わりにread.next()を使用してください
title = read.next();
category = read.next();
runningTime = read.next();
year = read.next();
price = read.next();
.next()
の代わりに文字列を返す.nextLine()
を呼び出したいと思います。 .nextLine()
呼び出しが現在の行を過ぎています。
Scanner read = new Scanner (new File("datafile.txt"));
read.useDelimiter(",");
String title, category, runningTime, year, price;
while(read.hasNext())
{
title = read.next();
category = read.next();
runningTime = read.next();
year = read.next();
price = read.next();
System.out.println(title + " " + category + " " + runningTime + " " + year + " " + price + "\n"); //just for debugging
}
read.close();
next();
を使用している場所でnextLine();
を使用する必要があります
チュートリアルをご覧ください: http://docs.Oracle.com/javase/tutorial/essential/io/scanning.html
次の行に注意してください。
try {
s = new Scanner(new BufferedReader(new FileReader("xanadu.txt")));
while (s.hasNext()) {
System.out.println(s.next());
}
また、String.split()関数を使用して文字列を文字列の配列に変換し、それぞれの値を反復処理して値を求めることもできます。
カンマ区切りの文字列をArrayListに変換する方法 詳細については、こちらを参照してください。
上記の答えはすべて正しく、実際には同じです。ただし、Scanner
のバッファサイズは1024のみであることを誰もが覚えておくべき重要な点があります。つまり、区切られたテキストの長さがそれ以上になると、解析が停止します。
したがって、指定されたソリューションを少し拡張するには、ファイルを直接BufferedReader
に渡す代わりにScanner
を使用します。例:
BufferedReader in = new BufferedReader(new FileReader("datafile.txt"), 16*1024);
Scanner read = new Scanner(in);
read.useDelimiter(",");
String title, category, runningTime, year, price;
while(read.hasNext())
{
title = read.next();
category = read.next();
runningTime = read.next();
year = read.next();
price = read.next();
System.out.println(title + " " + category + " " + runningTime + " " + year + " " + price + "\n"); //just for debugging
}
read.close();
1つの問題は次のとおりです。
while(read.hasNext())
{
title = read.nextLine();
category = read.nextLine();
runningTime = read.nextLine();
hasNext()
このスキャナーの入力に別のトークンがある場合、trueを返します。行全体ではありません。 hasNextLine() を使用する必要があります
NextLine()を3回実行しています。行を読んで行を分割する必要があると思います。