2012-04-20 11 views
1

フルネーム(姓と名)とID番号の2つの列を持つファイルがあります。ファイルには "Name"と "ID"というヘッダーがあり、ヘッダーの下にあり、すべてのエントリの上にスペースで区切られたダッシュの行があります。それは次のようになります。私はダッシュのこの行をスキップできるようにしたいと私は無駄でScanner.skip()を使用しようとしてきたJavaスキャナがダッシュ行をスキップ

NAME  ID 
------  ------ 
John Snow 0001 
Tyrion  0002 

。私は既に列のヘッダーをバイパスするために、列とif文の間のスペースを分割する正規表現をwhileループ内に設定しました。

答えて

1

スキャナーの代わりにBufferedReaderを使用することもできます。これらのダッシュをスキップするために使用できるreadLine()メソッドがあります。

BufferedReader reader = new BufferedReader(... your input here...); 
String s; 
while((s=reader.readLine())!=null) { 
    if (s.startWith("--") 
     continue; 
    // do some stuffs 

} 

EDIT: あなたはラインが、使用できる唯一のダッシュとスペースが含まれていることを確認したい場合は、次の

s.matches("[\\- ]+") 

あなたのラインはダッシュと空白

+0

同じソリューションを。私は代わりに行に無駄な文字しか含まれていないかどうかをチェックするので、 "--Doe"のようにいくつかのデータを失うことはありませんが、BufferedReaderも私にとっては良いです:) – MykoB

+0

@ guillaume-polet BufferedReaderの理由がScannerより優れているようですか? –

+0

私は同じと思う。私はskip()やuseDelimiter()を使ってどこにも行きたくないので、後で試してみるつもりです。それは破線を読み続ける。 – Roberto

0

が含まれている場合にのみマッチします最初の2行が常に静的であれば、これを試してください。

reader.readLine(); //reads first line, Name ID and does nothing 
reader.readLine(); //reads second line, ---- ---- and does nothing 
//start scanning the data from now. 
while(!EOF){ 
String line = reader.readLine(); 
//process the data. 
} 

" - "で各行を比較するオーバーヘッドをなくすことができます。

+0

これは私が今やっていることです。それは動作しますが、私はそれについて「汚い」と感じます。 – Roberto

0
FileReader fileReader = new FileReader(//File with Exension); 

Scanner fileScan = new Scanner(fileReader); 

fileScan.useDelimiter("\\-") 

while(fileScan.hasNext()){ 

    //Store the contents without '-' 
    fileScan.next(); 
} 

希望すでにこの試行し、スキャナを使用している場合、これは

+0

私はskip()またはuseDelimiter()でどこにも行きません。それは破線を読み続ける。私は "\\ - "と "[\\ - ] +"を無駄に使ってきました。 – Roberto

0

を支援します。私のために

String curLine; 

while (scan.hasNext()){ 
    curLine = scan.readLine(); 
    if(!curLine.startsWith("----") { 
     .... //whatever code you have for lines that don't contain the dashes 

    } 
}