2014-03-13 44 views
3

我有阵Java的多维数组和字符串数组

data[][]; 

转换为字符串:

string = Arrays.deepToString(data); 

字符串:

[[1, 1394119227787, 59474093, USD/DKK, true, 0.05, 5.391582, 5.00663, 5.39663, null, null], [1, 1394581174413, 59500543, EUR/JPY, false, 0.05, 142.489381, 145.3, 139.68, null, null], 
[1, 1394581174413, 59500543, EUR/JPY, false, 0.05, 142.489381, 145.3, 139.68, null, null], 
[1, 1394581174413, 59500543, EUR/JPY, false, 0.05, 142.489381, 145.3, 139.68, null, null]] 

和如何转换这个字符串返回数组?

+1

如何转换什么?数据仍然是一个数组。 – Maroun

+0

你不能那样做;对象和字符串表示之间不存在双射。 – fge

+0

@MarounMaroun我假设原始数组不再可用。 – Pablo

回答

3

尝试我stringToDeep()方法来转换回阵列。

import java.util.*; 

public class DeepToArray { 

public static void main(String[] args) { 

    int row, col; 
    row = 2; 
    col = 3; 
    String[][] in = new String[row][col]; 

    for (int i = 0; i < row; i++) { 
     for (int j = 0; j < col; j++) { 
      in[i][j] = i + " " + j; 
     } 
    } 
    String str = Arrays.deepToString(in); 

    System.out.println(str); 

    String[][] out = stringToDeep(str); 

    for (String s2[] : out) { 
     for (String s3 : s2) { 
      System.out.print(s3 + " "); 
     } 
     System.out.println(); 
    } 
} 

private static String[][] stringToDeep(String str) { 
    int row = 0; 
    int col = 0; 
    for (int i = 0; i < str.length(); i++) { 
     if (str.charAt(i) == '[') { 
      row++; 
     } 
    } 
    row--; 
    for (int i = 0;; i++) { 
     if (str.charAt(i) == ',') { 
      col++; 
     } 
     if (str.charAt(i) == ']') { 
      break; 
     } 
    } 
    col++; 

    String[][] out = new String[row][col]; 

    str = str.replaceAll("\\[", "").replaceAll("\\]", ""); 

    String[] s1 = str.split(", "); 

    int j = -1; 
    for (int i = 0; i < s1.length; i++) { 
     if (i % col == 0) { 
      j++; 
     } 
     out[j][i % col] = s1[i]; 
     //System.out.println(s1[i] + "\t" + j + "\t" + i % col); 
    } 
    return out; 
} 
} 
+0

谢谢:)终于有人聪明 – zix

4

在java API中没有方法可以自动将它转换回数组。你可以编写代码来自己做这件事,但这会很棘手;此格式不会转义特殊字符,如方括号或逗号。使用一种专门用于编码和解码数组的格式(如JSON)可能更容易。

+0

也许很简单的例子? – zix

+0

@zix答案基本上是“不要这样做”。您正在发明自己的序列化数据的方式,而不是使用标准方式,例如JSON。 – Pablo

+0

如何将字符串转换回数组? –

0

阵列到串并返回到阵列:P

import java.util.Arrays; 
import java.util.Random; 

public class arrays { 

    public static void main(String [ ] args) 
    { 
     String[][] in = new String [10][4]; 
     String[][] out = new String [10][4]; 
     arrays nr = new arrays(); 

     for(int i =0; i< 4; i++){ 
      for(int j =0; j< 4; j++){ 
       in[i][j] = nr.Rand(5); 
      }  
     } 
     System.out.println(Arrays.deepToString(in)); 

     // tablica ok 
     // convert array to string 
     String line = ""; 
     for(int i =0; i< 4; i++){ 
      for(int j =0; j< 4; j++){ 
       line += in[i][j] + "_"; 
      }  
      line += ":"; 
     } 

     System.out.println(line); 

     // line back to array 

     String[] xline = line.split(":"); 

     int ss = 0; 
     for (String str : xline) { 
      out[ss] = (String[]) str.split("_"); 

       System.out.println("string line>>>" + str); 

       ss++; 
     } 

     System.out.println(Arrays.deepToString(out)); 
    } 

     public String nextSessionId() { 
      //private SecureRandom random = new SecureRandom(); 
      //return new BigInteger(130, random).toString(32); 
      return null; 
     } 

     public String Rand(int zz){ 
      char[] chars = "987654321abcdefghijklm111nopqrstuvwxyz".toCharArray(); 
      StringBuilder sb = new StringBuilder(); 
      Random random = new Random(); 
      for (int i = 0; i < zz; i++) { 
       char c = chars[random.nextInt(chars.length)]; 
       sb.append(c); 
      } 
      String output = sb.toString(); 
      // System.out.println(output); 
      return output; 

     } 
} 

:d