私はJavaを使用して以下のデータストリームを解析しています。私が現在行っているのは、行ごとに読み取り、kvタグの下のキーと値からオブジェクトを解析して入力することです。
以下は私が解析しているデータの一部です。各レコードは「kv」キーワードで囲まれ、値「prefix」のキーは、新しいkv値が異なるプレフィックス値で到着するまで、すべての今後のキーに「CURRENT」プレフィックスを付ける必要があることを指定します初期化。
kv {
key "prefix"
str_value "prefix1"
}
kv {
key "init" //Actually it is prefix1:init
int_value 1
}
kv {
key "index" //Actually it is prefix1:index
int_value 3
}
kv {
key "prefix"
str_value "prefix2"
}
kv {
key "init" //Actually key is prefix2:init
int_value 1
}
kv {
key "index" //Actually key is prefix2:index
int_value 6
}
kv {
key "name"
int_value 7
}
kv {
key "prefix"
str_value "prefix3/"
}
kv {
key "index"
int_value 8
}
kv {
key "prefix"
str_value "prefix1"
}
kv {
key "index"
int_value 7
}
そのようなデータを処理し、RedisのようなnoSQL DBに永続化できるJavaオブジェクトにK、Vペアを入力するより良い方法はありますか?
useDelimiterオプション付きのスキャナーを使用できます。レコードの内容がファイルinputt.txtにあることを前提としたサンプルコードを追加しました。
データ
kv {
key "prefix"
str_value "prefix1"
}
kv {
key "init"
int_value 1
}
kv {
key "index"
int_value 3
}
kv {
key "prefix"
str_value "prefix2"
}
kv {
key "init"
int_value 1
}
kv {
key "index"
int_value 6
}
kv {
key "name"
int_value 7
}
kv {
key "prefix"
str_value "prefix3/"
}
kv {
key "index"
int_value 8
}
kv {
key "prefix"
str_value "prefix1"
}
kv {
key "index"
int_value 7
}
コード
public static void main(String[] args) throws FileNotFoundException {
String file = "inputt.txt";
Scanner scan = new Scanner(new File(file)).useDelimiter("\\s+");
/** One segment of record as parsed by scanner.
TOKENS Index
kv 0
{ 1
key 2
"prefix" 3
str_value 4
"prefix1" 5
} 6
*/
int tokenCount=0;
int index1=3;
int index2=5;
while (scan.hasNext()) {
String str=scan.next();
if(tokenCount%7==index1){
System.out.print(str);
}
if(tokenCount%7==index2){
System.out.println(" "+str);
}
tokenCount++;
}
scan.close();
}
出力
"prefix" "prefix1"
"init" 1
"index" 3
"prefix" "prefix2"
"init" 1
"index" 6
"name" 7
"prefix" "prefix3/"
"index" 8
"prefix" "prefix1"
"index" 7
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加