2013-03-15 18 views
1

这种感觉喜欢的事,必须重新发明了很多很多次的逗号分隔的列表,且有应该不是一个而是几个库。Java库或代码,以正确地解析键=值赋值

我想解析包含若干形式“键=值”,由逗号分隔的“分配”的文本行。值得注意的是,应该可以将值指定为与Java允许尽可能指定字符串或数值的方式相近。例如转义字符串,指定Unicode字符或将制表符指定为\ t。

有谁知道一个开源或LGPL库,有方法可以做到这一点的?

更新:我不认为看(还)如何性质可以很容易地用于此,我必须处理一个包含若干键值对,用逗号分隔的字符串。这里的问题是,除非解析器知道如何正确解析值(它当然可以包含逗号),否则没有简单的方法可以在逗号分割字符串。基本上,我想要做的就是将如下所示的字符串转换为一个字符串:var1=1, var2="asdf",var3="x,y,z\n",var4="\"",或者将Value包装为String,Boolan或数字值。

回答

1
+0

没有,因为我有一个包含逗号分隔这样的赋值因为属性列表的字符串还支持一个完全不同的语法。我希望语法更接近于在Java或Groovy中查找String常量的变量赋值,没有创建词法分析器,解析器等的所有开销。 – Johsm 2016-06-12 22:45:13

0

你说的是属性文件?你可以使用Properties这样做:

Properties properties = new Properties(); 
properties.load(new FileInputStream("/path/to/file.properties")); 
+0

不,因为我有一个包含逗号分隔的列表的字符串这样的分配和因为属性也支持完全不同的语法。 我想语法更密切到什么在Java或Groovy中,字符串常量看起来变量赋值,而无需创建一个词法分析器的所有开销,解析器等 – Johsm 2013-03-16 15:11:46

0

你不能使用java java.util.Properties吗?

http://docs.oracle.com/javase/6/docs/api/java/util/Properties.html

Properties props = new Properties(); 
props.load(new FileInputStream("myfile.properties")); 
+0

我需要解析“分配”的一个逗号分隔的列表。具有属性,解析的源代码的逗号分隔的列表不能做和属性,除了严格地面向行的,也支持相当的范围内不同的附加语法的(空格或结肠代替分配字符,注释等) – Johsm 2013-03-16 15:10:07

0

无需图书馆。

String[] strArray= "var1=1,var2=2,var3=test".split(","); 
    Map<String, String> map = new HashMap<>(); 
    for (String pair : strArray) { 
     String split[] = pair.split("="); 
     map.put(split[0], split[1]); 
    } 

如果你真的想使用图书馆,你可以尝试Guava

Iterable<String> split = Splitter.on(',').omitEmptyStrings().split("var1=1,var2=2,var3=test"); 
+0

嗯,否,则为什么一个人想要一个图书馆的原因是,显然,等号和逗号都可以包含在该值中,例如var =“==,\”“将是一个有效的赋值 – Johsm 2016-06-12 22:44:30

+0

图书馆可以帮助你简化流程,但你应该用你自己的算法做到这一点(RegEx在这种情况下会有所帮助) – Hamedz 2016-06-13 06:42:19