我需要在Android上的sqlite數據庫中存儲2d enum數組,所以最簡單的方法似乎是將其轉換爲字符串(例如CSV字符串)以存儲在數據庫中,然後在檢索時再返回。將二維數組轉換爲字符串並在Java中再次返回?
如何在java中做到這一點?
MyEnum[][] myArray;
感謝
我需要在Android上的sqlite數據庫中存儲2d enum數組,所以最簡單的方法似乎是將其轉換爲字符串(例如CSV字符串)以存儲在數據庫中,然後在檢索時再返回。將二維數組轉換爲字符串並在Java中再次返回?
如何在java中做到這一點?
MyEnum[][] myArray;
感謝
如果你想整個二維數組轉換成一個字符串,你可以使用一個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展示了在他鏈接的帖子。
http://stackoverflow.com/questions/229856/ways-to-save-enums-in-database –
謝謝肖恩,但它更多的轉換2d數組到字符串,然後再回來我很關心 – fxfuture
爲什麼所有的降價? – fxfuture