-2

我需要将二维枚举数组存储在 Android 上的 sqlite 数据库中,因此最简单的方法似乎是将其转换为字符串(例如 CSV 字符串)以存储在数据库中,然后在检索时再次返回。

我怎样才能在java中做到这一点?

MyEnum[][] myArray;

谢谢

4

1 回答 1

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()方法来进行转换,正如@sean-f 在他链接的帖子中向您展示的那样。

于 2013-06-22T07:05:19.430 回答