2

基本上,我创建了一个动态二维ArrayList。二维ArrayList到一个正常的数组java

private ArrayList<char[]> myArray; 

下面这段代码在循环中完成。给出几个“相同长度”的随机字符串来存储 数组中的所有字符。

而(体)

char[] temp = myString.toCharArray(); 
myArray.add(temp); 

所有字符插入到ArrayList中打完,我想myArray的转换成普通数组。 (为什么?因为它是要在未来有用),我想我错在这里做:

charArray = (char[][]) myArray.toArray(); 
//declaration of 'charArray' is already done at the start of the class. 

所以,问题是,当我尝试打印整个“charArray”只是为了检查,或任何元素,我得到一个“java.lang.NullPointerException”错误。

那么如何将2d ArrayList转换为普通数组?我尝试了许多不同的来源,但没有帮助。

谢谢。

+0

@macduff是,所有的字符串是相同的大小。 – jbchichoko 2012-02-28 14:31:24

回答

4

不知道最后是否需要char[]char[][]。请参见下面两个选项:

public static void main(String... args) throws Exception { 
    List<char[]> myArray = new ArrayList<char[]>(); 
    myArray.add("string1".toCharArray()); 
    myArray.add("string2".toCharArray()); 
    myArray.add("string3".toCharArray()); 

    char[][] charArray2D = myArray.toArray(new char[0][0]); 
    System.out.println(charArray2D.length); //prints 3 

    StringBuilder s = new StringBuilder(); 
    for (char[] c : myArray) { 
     s.append(String.copyValueOf(c)); 
    } 
    char[] charArray1D = s.toString().toCharArray(); 
    System.out.println(charArray1D.length); //prints 21 
} 
+0

啊,谢谢。添加“.toArray(new char [0] [0])”工作。但是,你能否解释一下“新字符[0] [0]”是如何影响解决方案的?新手在这里:) – jbchichoko 2012-02-28 14:47:04

+0

检查javadoc在这里:http://docs.oracle.com/javase/6/docs/api/java/util/List.html#toArray%28T[]%29 – assylias 2012-02-28 14:49:20

2

事情是这样的:

public static void main(String[] args) { 
    List<char []> list = new ArrayList<char []>(); 
    list.add("hello".toCharArray()); 
    list.add("world !".toCharArray()); 
    char[][] xss = list.toArray(new char[0][0]); 
    for (char[] xs : xss) { 
     System.out.println(Arrays.toString(xs)); 
    } 
} 

输出:

[h, e, l, l, o] 
[w, o, r, l, d, , !]