使用前缀解析K,V数据的最佳方案

时间:2016-03-29 00:29:40

标签: java parsing nosql

我使用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?

2 个答案:

答案 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来获取这些数据。