各行に2つの文字列が含まれている行を1行ずつ読み取る最も速い方法は何ですか。入力ファイルの例は次のとおりです。
Fastest, Way
To, Read
One, File
Line, By Line
.... can be a large file
文字列の間にスペースがある場合でも、必要な各行には常に2セットの文字列があります。 「ライン別」
現在使用しています
FileReader a = new FileReader(file);
BufferedReader br = new BufferedReader(a);
String line;
line = br.readLine();
long b = System.currentTimeMillis();
while(line != null){
それは十分に効率的ですか、または標準のJava API(外部ライブラリは使用しないでください))を使用したより効率的な方法があります。
「効率的」とは、どういう意味かによって異なります。パフォーマンスの観点からは問題ありません。コードのスタイルとサイズについて質問している場合、私はほとんどの場合、小さな修正を加えて行います。
_ BufferedReader br = new BufferedReader(new FileReader(file));
String line;
while((line = br.readLine()) != null) {
// do something with line.
}
_
STDINからの読み取りJava 6は、別の方法を提供します。クラスコンソールとそのメソッドを使用してください。
readLine()
およびreadLine(fmt, Object... args)
import Java.util.*;
import Java.io.*;
public class Netik {
/* File text is
* this, is
* a, test,
* of, the
* scanner, I
* wrote, for
* Netik, on
* Stack, Overflow
*/
public static void main(String[] args) throws Exception {
Scanner sc = new Scanner(new File("test.txt"));
sc.useDelimiter("(\\s|,)"); // this means whitespace or comma
while(sc.hasNext()) {
String next = sc.next();
if(next.length() > 0)
System.out.println(next);
}
}
}
結果:
C:\Documents and Settings\glowcoder\My Documents>Java Netik
this
is
a
test
of
the
scanner
I
wrote
for
Netik
on
Stack
Overflow
C:\Documents and Settings\glowcoder\My Documents>
Stringの2つのセットを分離する場合は、次の方法でこれを行うことができます。
BufferedReader in = new BufferedReader(new FileReader(file));
String str;
while ((str = in.readLine()) != null) {
String[] strArr = str.split(",");
System.out.println(strArr[0] + " " + strArr[1]);
}
in.close();