2013-03-15 73 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