簡體   English   中英

將字符串轉換為多維數組

[英]convert a String to a multi-dimensional array

上下文:我已經將數組轉換為字符串,然后轉換為字節,以便可以將其存儲為數據庫中的Blob。 然后,我想檢索數組。 我檢索blob並從字節中檢索字符串。 然后,我想從字符串中檢索數組。

現在,我一直在研究將字符串轉換回數組的各種選項。 我曾經考慮過使用帶有特定正則表達式的string.split()來恢復數組,但是,由於它是多維的,因此變得有些復雜。 但是,有沒有一種簡單的方法可以將字符串轉換回仍包含其原始“數組語法”的數組?

例如

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

干杯!

ps可以將數組存儲在數據庫(Google App Engine)中,而無需使用這種低效率的復雜方法嗎?

您可以將列表存儲為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")));

為什么將其存儲為Blob? 將數組轉換為字符串:“ 1,2,3”。 然后,在加載時,執行以下操作:loadedString.split(“,”)並遍歷數組(split()方法的結果為String []),然后將其添加到您正在使用的Array數據結構中。

使用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

用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]]"
   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));
        }
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM