public final class LineSplitter
extends java.lang.Object
LineSplitter は、1行分のデータを順次分割するクラスです。ファイルは、『改行』で行分割して、カンマかタブでカラム分割します。 応答ファイルの解析処理を簡素化するため、以下のルール(禁止事項)を定めます。 1.ダブルクオートの中に、ダブルクオート、改行、を含まないこと。 (カンマとスペースは含めることが出来ます。) 2.1行の定義は、『改行』とします。 3.スペース分割時は、複数スペースの場合でも、1つの区切り文字として扱います。 (A B C D → 「A」、「B」、「C」、「D」 に分割されます。) 4.カンマ分割は、ダブルクオート間のカンマは分解しません。 混在した場合でも、最初に見つけた方が優先されます。 5.カンマ分割時は、複数カンマの場合は、それぞれ空文字列に分割されます。 カンマ分割後、それぞれの文字列は、前後スペースを削除(trim)します。 (A, B , , C , D → 「A」、「B」、「」、「C」、「D」 に分割されます。) 6.カラム分解後の、ダブルクオートは、削除します。 ((A, B , , "CC C,C" , D → 「A」、「B」、「」、「CC C,C」、「D」 に分割されます。) 処理手順 1.ファイルより、1行づつ(改行コードで分割)読み込みます。 2.読み込んだ1行について、先頭が、『#』の行はコメント行としてスキップします。 3.先頭から、区切り文字(スペースかカンマかタブ)が見つかるまでを、1カラムとして取得します。 4.その間、ダブルクオートが見つかったら、次のダブルクオートまで、取り込みます。 5.カラム分割された単語の前後スペースと、前後ダブルクオートを削除します。 trim()が先で、ダブルクオートの削除は、後から行います。(ダブルクオート内のtrim()は行いません。) 6.個々のカラムを配列にして返します。 7.これを、ファイルが終了するまで繰り返します。 並行性 このクラスは、staticメソッドのみのユーティリティークラスのため、スレッドに対して、安全です。 また、ファイルの読み取りに関して、FileChannelのtryLockを行っています。
1.0.0 (2016/04/28) 新規作成 |
修飾子とタイプ | フィールドと説明 |
---|---|
static java.lang.String |
USAGE
main メソッドから呼ばれる ヘルプメッセージです。
|
コンストラクタと説明 |
---|
LineSplitter()
デフォルトコンストラクター
ファイル読み取りのCharsetは、UTF-8になります。
|
LineSplitter(java.nio.charset.Charset chObj,
java.lang.String inClms)
Charsetを指定して、オブジェクトを作成します。
|
LineSplitter(java.lang.String chStr,
java.lang.String inClms)
Charsetに対応した文字列を指定して、オブジェクトを作成します。
|
修飾子とタイプ | メソッドと説明 |
---|---|
java.lang.String |
cmntCut(java.lang.String line)
先頭文字が、'#' の行を削除した文字列を返します。
|
void |
forEach(java.nio.file.Path inPath,
java.util.function.Consumer action)
1行づつ処理を行った結果のトークンをConsumerにセットする繰り返しメソッドです。
|
java.lang.String[] |
getColumns()
#NAME が存在すれば、そこから名前配列を返します。
|
static void |
main(java.lang.String[] args)
処理を実行する main メソッドです。
|
java.util.List |
split(java.lang.String orgLine)
1行分の分割したトークンのリストを返します。
|
public static final java.lang.String USAGE
public LineSplitter()
java.nio.charset.StandardCharsets.UTF_8
public LineSplitter(java.lang.String chStr, java.lang.String inClms)
chStr
- ファイルを読み取るときのCharset文字列inClms
- 外部指定カラム文字列(CSV形式)public LineSplitter(java.nio.charset.Charset chObj, java.lang.String inClms)
chObj
- ファイルを読み取るときのCharsetオブジェクトinClms
- 外部指定カラム文字列(CSV形式)public java.lang.String[] getColumns()
clms
- 外部指定カラム文字列(CSV形式)public void forEach(java.nio.file.Path inPath, java.util.function.Consumer action)
inPath
- 処理対象のPathオブジェクトaction
- 行を区切り文字で分割した文字列のリストを引数に取るConsumerオブジェクトjava.lang.RuntimeException
- ファイル読み込み時にエラーが発生した場合FileUtil.lockForEach(Path,Consumer)
public java.util.List split(java.lang.String orgLine)
orgLine
- 1行データ(オリジナル)public java.lang.String cmntCut(java.lang.String line)
line
- 1行分の文字列(not null)java.lang.NullPointerException
- 引数lineが、nullの場合。public static void main(java.lang.String[] args)
args
- コマンド引数配列Webアプリケーションフレームワーク openGionCopyright (c) 2009 The openGion Project.