我使用java解析下面提到的数据流。我目前正在做的是逐行阅读并解析和填充来自Key和kv标签下的值的对象。
以下是我正在解析的一些数据,每个记录都包含在" kv"关键字和键值#34;前缀"指定所有即将到来的键应该以" CURRENT"为前缀。前缀,直到新的kv值到达,其中包含不同的前缀值。
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
}
我想知道是否有更好的处理此类数据的方法,并在Java对象中填充K,V对,可以持久保存到noSQL D.B.像Redis?
答案 0 :(得分:1)
您可以使用带有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
}
<强> CODE 强>
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
答案 1 :(得分:0)
我认为一种常见的方法是在java中使用正则表达式扫描整个字符串并使用group来获取这些数据。