2013-06-22 57 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

相关问题