2013-06-22 86 views
-2

我需要在Android上的sqlite數據庫中存儲2d enum數組,所以最簡單的方法似乎是將其轉換爲字符串(例如CSV字符串)以存儲在數據庫中,然後在檢索時再返回。將二維數組轉換爲字符串並在Java中再次返回?

如何在java中做到這一點?

MyEnum[][] myArray; 

感謝

+0

http://stackoverflow.com/questions/229856/ways-to-save-enums-in-database –

+0

謝謝肖恩,但它更多的轉換2d數組到字符串,然後再回來我很關心 – fxfuture

+0

爲什麼所有的降價? – fxfuture

回答

2

如果你想整個二維數組轉換成一個字符串,你可以使用一個CSV型編碼,但你必須保護任何特殊字符(典型的逗號分隔符),以免弄亂字段分隔。一種快速(而且很髒)的方法是對每個值使用enc = URLEncoder.encode(val, "UTF-8"),然後使用val = URLDecoder.decode(enc, "UTF-8")

你也必須使用另一個分離器(例如\n)來分隔行:

String write(MyENum[][] myArray) { 
    String res = ""; 
    for (int iRow = 0; iRow < myArray.length; iRow++) { 
     for (int iCol = 0; iCol < myArray[iRow].length; iCol++) 
      res += URLEncoder.encode(myArray[iRow][iCol].name(), "UTF-8")+","; 
     res += "\n"; 
    } 
} 

(我將它讓你不要在每一行的末尾添加額外的",")。然後,回讀:

MyEnum[][] read(String res) { 
    String[] rows = res.split("\n"); 
    MyEnum[][] myArray = new MyEnum[rows.length][]; 
    for (int iRow; iRow < rows.length; iRow++) { 
     String[] cols = rows[iRow].split(","); 
     myArray[iRow] = new MyEnum[cols.length]; 
     for (int iCol = 0; iCol < cols.length; iCol++) 
      myArray[iRow][iCol] = MyEnum.valueOf(URLDecoder.decode(cols[iCol], "UTF-8")); 
    } 
    return myArray; 
} 

這是所有基於這樣的事實,有你的枚舉可進行轉型name()valueOf()方法,如@肖恩-F展示了在他鏈接的帖子。

+0

非常感謝!完美的作品。一個小的錯字要注意 - 這行應該是String [] cols = rows [iRow] .split(「,」); – fxfuture

+1

謝謝,我編輯了我的答案。很高興幫助! :) – Matthieu

相關問題