2013-09-26 157 views
0

我正在研究一个程序,该程序要求我从文件中提取一维字符串数组并将其转换为二维数组。从文件中取数组的工作正常,但我无法获得第二部分的工作。将一维字符串数组转换为二维字符数组

我正在使用的代码是:

char[][] array2 = new char [7][5]; 

for (int i = 0; i < array1.length; i++) 
{ 
    array2[i]= array[i].toCharArray(); 
} 

for (int i = 0; i < 5; i++) 
{ 
    for (int j = 0; j < 7; j++) 
    { 
     System.out.println(array2[i][j]); 
    } 
} 

阵列应该在网格格式打印,但打印向下。

任何帮助表示赞赏,谢谢。

+0

哪有1D串被转换为2d字符数组? – blackpanther

+1

println在行尾打印换行符。使用print来打印而不换行 – njzk2

+0

要添加到@ njzk2的注释中,请使用'j'循环内的'print'将一个字符串中的每个字符打印在一行中,然后紧跟在该循环块后面,使用'println() ;'去下一个字符串/字符数组的新行。 – jonhopkins

回答

0

您正在使用println,这就是为什么每个字符都按自己的行打印的原因。您必须改用print

注意,如您所愿,因为内部阵列将被改写

new char [7][5]; 

你的初始化不起作用。使用

new char[7][] 

对于相同的结果,但对于您的意图更清晰。这里

for (int i = 0; i < 5; i++) 
    for (int j = 0; j < 7; j++) 

你显然已经逆转索引的顺序:您仅通过5个外部阵列迭代,但您已经分配7.你应该做的,而不是对抗的实际数组的长度检查,而不是硬编码的数字。内部数组可以是任何大小,毕竟(这取决于字符串长度)。

0

看一看在String.toCharArray()

如果向下打印,然后更改

for (int i = 0; i < 7; i++) //row loop 
    { 
    for (int j = 0; j < 5; j++) //column loop 
    { 
     System.out.print(array2[i][j]); 
    } 
    System.out.println(); //add here 
    } 

看一看

  1. formatting
  2. print vs println
+0

array1可能是一个String数组,这里是 – njzk2

+0

@ njzk2:哦!我错过了。谢谢先生。 –

2

在内循环中使用print而不是println,并且在每个循环之后打印一个空行println

for (int i = 0; i < 7; i++) // see changes 5/7. You did "new char[7][5]" not [5][7] 
{ 
    for (int j = 0; j < 5; j++) // see changes 7/5 
    { 
     System.out.print(array2[i][j]); 
    } 
    System.out.println(); 
} 

更新:

下面是一个转换字符串数组二维字符数组的程序。

public class StringToChar { 
    public static void main(String[] args) { 
     String[] strArr = { "HELLO", "WORLD" }; 
     char[][] char2D = new char[strArr.length][]; 

     for (int i = 0; i < strArr.length; i++) { 
      char2D[i] = strArr[i].toCharArray(); 
     } 

     for (char[] char1D : char2D) { 
      for (char c : char1D) 
       System.out.print(c + " "); 

      System.out.println(); 
     } 
    } 
} 
+0

谢谢,你不会知道为什么即时通讯打印第一行后得到一个“java.lang.NullPointerException”? – user2817804

+0

@ user2817804查看我更新的答案。 – TheKojuEffect

+0

再次感谢,例外消失了。现在我只需要弄清楚为什么数组只打印出一行而忽略其余部分。 – user2817804

1

一些建议,

  1. 取代char[][] array2 = new char [7][5];char[][] array2 = new char [array1.length][];(其中array1握着你的字符串),所以当你有一个字符串的二维数组将有尽可能多的行
  2. 你的循环
for (int i = 0; i < 5; i++) 
{ 
    for (int j = 0; j < 7; j++) 
.... 
} 

变化

for (int i = 0; i < array2.length; i++) 
{ 
    for (int j = 0; j < array2[i].length; j++) 
.... 

另一件事是,如果你想你的字符串印刷整齐,使用System.out.print,每当你完成内部循环,打印出'\n'字符

相关问题