2013-05-13 82 views
0

上下文:我已經將數組轉換爲字符串,然後轉換爲字節,以便它可以作爲Blob存儲在數據庫中。然後我想要檢索數組。我檢索blob並從字節中檢索字符串。然後我想從字符串中檢索數組。將字符串轉換爲多維數組

現在我一直在尋找各種選項來將我的字符串轉換回數組。我曾經使用string.split()和某個正則表達式來獲取我的數組,但是,這是多維的。然而,是否有一種簡單的方法將字符串轉換回數組,其中字符串仍然包含其原始「數組語法」?

例如

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

乾杯!

p.s.可以將數組存儲在數據庫(谷歌應用程序引擎)中,而不需要這種低效的複雜方法?

+0

我也想補充THA我明白,如果這不起作用,那麼我總是可以將數組的每個部分作爲單獨的實體存儲在數據庫中 – 2013-05-13 12:23:10

+0

這裏是類似的問題... http://stackoverflow.com/questions/2786777/convert-string -into-two-dimensional-string-array-in-java – Terafor 2013-05-13 12:26:10

+0

是的,他的替代方法是正確的答案,謝謝。對於那些想知道的我已經發布它作爲對未來用戶的自己問題的答案。 (我已經搜索,但沒有遇到過這個問題) – 2013-05-13 13:52:04

回答

0

爲什麼要將它存儲爲blob?將數組轉換爲字符串:「1,2,3」。然後,在加載時,執行如下操作:loadedString.split(「,」)並遍歷數組(split()方法的結果是String [])並將其添加到您正在使用的Array數據結構中。

+0

啊當然是當它是字符串格式我可以將它存儲在數據庫中沒有blob。我剛剛使用了blob,因爲我知道我不能將數組存儲在數據庫中,因爲它們是! – 2013-05-13 13:43:23

0

使用split方法,該方法將一個字符串的accorign解析爲一個給定的分隔符,並從中返回一個數組。

看看this exmaple

//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 
+0

由於該數組是多維的,因此不會有一個特定的分隔符,例如[[你好,世界],[再見,星球]]不會簡單地分裂。因此不會將其返回到原始md數組。顯然,我可以將原始md數組分割成行和列,以獲得一維數組,以便分隔符起作用。我只是希望有人已經寫了一些能夠輕鬆拆分md-array的代碼? – 2013-05-13 13:46:05

0

Convert string into two dimensional string array in Java給出了答案。

特別是:

如果你知道有多少行和列就會出現,你可以預先分配一個String [] [],並用掃描儀如下:

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]]" 
1

你可以將列表存儲爲EmbeddedProperty。

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

例如,在這裏你有我用這些類型的需求,一般的工具類...

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; 
    } 
} 

...,然後用類似使用它。 ..和:

turn.setPossibleQuestions(new ListTransformer<Long>().toList((List<EmbeddedEntity>)embeddedEntity.getProperty("possibleQuestions"))); 
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)); 
     } 
    } 
}