0

上下文:我已将数组转换为字符串,然后转换为字节,以便可以将其作为 blob 存储在数据库中。然后我想检索数组。我检索 blob 并从字节中检索字符串。然后我想从字符串中检索数组。

现在我一直在寻找将字符串转换回数组的各种选项。我曾研究过使用带有某些正则表达式的 string.split() 来取回我的数组,但是,由于它是多维的,所以这有点复杂。但是,有没有一种简单的方法可以将字符串转换回数组,其中字符串仍包含其原始的“数组语法”?

例如

Array array = {1, 2, 3}
String string = array.toString()
[insert string back to array]

干杯!

ps 可以将数组存储在数据库(谷歌应用程序引擎)中而不需要这种低效的复杂方法吗?

4

5 回答 5

1

您可以将列表存储为 EmbeddedProperty。

例如,在这里你有我用于这些需求的通用实用程序类......

import java.util.ArrayList;
import java.util.List;

import com.google.appengine.api.datastore.EmbeddedEntity;
/**
 * Utility class for storing Lists of simple objects
 * @author toni.navarro
 * 
 * 
 *
 */
@SuppressWarnings("unchecked")
public class ListTransformer<T> {
    public List<T> toList(List<EmbeddedEntity> embeddedList) {              
            List<T> list = new ArrayList<T>();
            if (embeddedList!=null) {
                    for (EmbeddedEntity embeddedEntity: embeddedList) {
                            list.add((T) embeddedEntity.getProperty("value"));
                    }
            }
            return list;
    }

    public List<EmbeddedEntity> toEmbeddedList(List<T> list) {              
            List<EmbeddedEntity> embeddedList = new ArrayList<EmbeddedEntity>();
            if (list!=null) {
                    for (T item: list) {
                            EmbeddedEntity embeddedItem = new EmbeddedEntity();
                            embeddedItem.setUnindexedProperty("value", item);
                            embeddedList.add(embeddedItem);
                    }
            }
            return embeddedList;
    }
}

...然后将其与以下内容一起使用:

embeddedEntity.setUnindexedProperty("possibleQuestions", new ListTransformer<Long>().toEmbeddedList(turn.getPossibleQuestions()));

... 和:

turn.setPossibleQuestions(new ListTransformer<Long>().toList((List<EmbeddedEntity>)embeddedEntity.getProperty("possibleQuestions")));
于 2013-05-13T14:05:36.033 回答
0

为什么要将它存储为 blob?将数组转换为字符串:“1,2,3”。然后,在加载时,执行以下操作:loadedString.split(",") 并遍历数组(split() 方法的结果是 String[])并将其添加到您正在使用的 Array 数据结构中。

于 2013-05-13T12:25:20.033 回答
0

使用split方法来解析字符串到给定的分隔符,并从中返回一个数组。

看看这个例子

//split string example

String assetClasses = "Gold:Stocks:Fixed Income:Commodity:Interest Rates";
String[] splits = asseltClasses.split(":");

System.out.println("splits.size: " + splits.length);

for(String asset: assetClasses){
System.out.println(asset);
}

OutPut
splits.size: 5
Gold
Stocks
Fixed Income
Commodity
Interest Rates
于 2013-05-13T12:26:32.813 回答
0

在 Java 中将字符串转换为二维字符串数组给出了答案。

尤其是:

如果您知道会有多少行和列,您可以预先分配一个 String[][] 并使用 Scanner,如下所示:

Scanner sc = new Scanner(data).useDelimiter("[,|]");
final int M = 3;
final int N = 2;
String[][] matrix = new String[M][N];
for (int r = 0; r < M; r++) {
    for (int c = 0; c < N; c++) {
        matrix[r][c] = sc.next();
    }
}
System.out.println(Arrays.deepToString(matrix));
// prints "[[1, apple], [2, ball], [3, cat]]"
于 2013-05-13T13:53:00.070 回答
0
   public static void main(String[] args) {

    String s = "my name is abc";
    StringTokenizer strTokenizer = new StringTokenizer(s);
    List<String> arrayList = new ArrayList<String>();
    while (strTokenizer.hasMoreTokens()) {
        arrayList.add(strTokenizer.nextToken());
    }
    List<List<String>> lst = new ArrayList<List<String>>();
    lst.add(arrayList);

    for (int i = 0; i < lst.size(); i++) {
        for (int j = 0; j < 1; j++) {
            System.out.println("Element " + lst.get(j));
        }
    }
}
于 2013-05-14T11:09:50.417 回答