【问题标题】:Convert 2D array to string and back again in Java?在Java中将二维数组转换为字符串并再次返回?
【发布时间】:2013-06-22 02:55:35
【问题描述】:

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

如何在 java 中做到这一点?

MyEnum[][] myArray;

谢谢

【问题讨论】:

标签: java android arrays sqlite multidimensional-array


【解决方案1】:

如果您想将整个二维数组转换为单个字符串,您可以使用 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 在他链接的帖子中向您展示的那样。

【讨论】:

  • 非常感谢!完美运行。需要注意的一个小错字——这一行应该是 String[] cols = rows[iRow].split(",");
猜你喜欢
  • 2010-11-28
  • 2015-01-19
  • 2013-02-18
  • 2011-01-13
  • 1970-01-01
  • 2011-10-30
  • 2011-02-16
  • 2011-11-15
  • 2012-10-27
相关资源
最近更新 更多