使用Regex(Java)在对象中创建值

时间:2010-11-05 11:57:40

标签: java regex parsing

我有一些看起来像这样的数据

myobject{keyone:"valueone",keytwo:"valuetwo",keythree:"valuethree"}
myobject{keyone:"valueone",keytwo:"valuetwo",keythree:"valuethree"}
myobject{keyone:"valueone",keytwo:"valuetwo",keythree:"valuethree"}

我想知道从它创建一堆对象的最佳方法是什么。我写了以下正则表达式来提取特定Key的所有值...

Pattern p_keyone            = Pattern.compile("keyone:\"(.+?)\"\\,"); 
Matcher match_keyone    = p_keyone.matcher(string);

while(match_keyone.find()) {      
    myobjects.add(new MyObject(match_keyone.group(1));
}

这给了我一堆带有单个参数的对象......

myobjects.add(<valueone>);

有没有办法可以执行单个正则表达式查询并创建一堆对象,一次性将所有值作为参数。像这样......

new MyObject( <valueone>, <valuetwo> , <valuethree> );

由于

2 个答案:

答案 0 :(得分:0)

你的做法还不错。

您可以改变的事情很少,但这取决于您的要求是否有意义:

  • 创建一个“Factory”类,它接受1行数据并创建对象。
  • 逐行读取数据,每行使用Factory创建它。
  • 根据您希望它获得的花哨(并且容易出错),您甚至可以读取对象和属性的名称,然后使用反射创建实例并设置属性。

答案 1 :(得分:0)

String.split()可以提供帮助:

 String line = "myobject{keyone:\"valueone\",keytwo:\"valuetwo\",keythree:\"valuethree\"}"
             // ^-----[0]------^  ^--[1]-^  ^--[2]-^  ^--[3]-^  ^--[4]---^  ^--[5]---^  ^[6]
 String[] parts = line.split("\"");
 MyObject myObject = new MyObject(parts[1], parts[3], parts[5]);