我需要将二维枚举数组存储在 Android 上的 sqlite 数据库中,因此最简单的方法似乎是将其转换为字符串(例如 CSV 字符串)以存储在数据库中,然后在检索时再次返回。
我怎样才能在java中做到这一点?
MyEnum[][] myArray;
谢谢
我需要将二维枚举数组存储在 Android 上的 sqlite 数据库中,因此最简单的方法似乎是将其转换为字符串(例如 CSV 字符串)以存储在数据库中,然后在检索时再次返回。
我怎样才能在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()
方法来进行转换,正如@sean-f 在他链接的帖子中向您展示的那样。