2017-02-08 8 views
1

私はファイルパスのテキストファイルを持っており、それらのファイルパスの配列が必要です。しかし、ファイルパスの中には、行頭に感嘆符を付けてコメントアウトしているものがあります。これらの行を配列に含めたくありません。処理中 - loadStrings()で特定の行を省略してテキストファイルを解析する

現在、テキストファイル全体をloadStrings()を使用して配列に配置してから、配列全体を繰り返し、 "!"で始まらない要素だけを配置します。 StringListで、StringListを配列に戻す前に、余分なスペースを持たない「コメント付きでない」ファイルパスのみを含む配列を取得します。

これは非常に非効率的で扱いにくいようですので、誰でもこれを達成するためのより良い方法を知っていますか? "!"で始まる行を無視する方法はありますか?元の読み取り段階で、または失敗した場合、最初の配列からこれらの要素を簡単に削除し、それに応じて配列のサイズを変更する方法がありますか?

現在のコード:

String file = "File_Paths.txt"; 
String[] filePaths_raw = loadStrings(file); 
StringList filePaths = new StringList(); 

for (int i = 0; i < filePaths_raw.length; i++) { 
    if (filePaths_raw[i].charAt(0) != 33) { 
    filePaths.append(filePaths_raw[i]); 
    } 
} 

filePathsArray = new String[filePaths.size()]; 

for (int i = 0; i < filePathsArray.length; i++) { 
    filePathsArray[i] = filePaths.get(i); 
} 
+0

https://stackoverflow.com/questions/6351224/parse-text-file-line-by-line-skipping-certain-linesの重複? – niutech

+0

具体的には、 'loadStrings()'関数が1つのファイル全体を解析するので、Javaで可能なようにファイルを行単位で読むことができますか? –

+2

はい、[BufferedReader](https://processing.org/reference/BufferedReader.html)を使用しています。 – niutech

答えて

1

あなたのソリューションは、罰金です。

ファイルの読み込みにはO(N)時間がかかります.Nはファイル内の行数です。

アレイを反復するには別のO(N)時間がかかります。これは2回行います。あなたの合計時間は3 * O(N)です。これはO(N)です。これを単一のループで行うことは依然としてO(N)時間である。だから、物事の壮大な計画では、これは実際には悲惨な非効率ではありません。

から配列を作成するarray()関数を使用すると、コードを簡素化できます。それはあなたのコードを高速化することはないでしょう(とにかく心配するべきではないかもしれませんが)、それは最後のforループを排除します。詳細はthe referenceでご覧になれます。

関連する問題