2016-01-21 61 views
0

我想从文本文件中填充char [] []数组,并且我似乎无法弄清楚如何执行此操作。我试图使用.toCharArray(),但它似乎不工作。如果你可以提供任何有关如何使这项工作非常棒的见解!在Java中将文本文件读入char [] []数组

String filename = "ArrayHW2.txt"; 
     int numTests = 6; 
     char[][] testAnswers = new char[50][5]; 
     char[] key = new char[4]; 

     Scanner input = null; 
     try 
     { 
      input = new Scanner(new File(filename)); 
     } 
     catch(FileNotFoundException e) 
     { 
      System.out.println("Error Opening File"); 
      System.exit(1); 
     } 

     for(int row = 0; row < testAnswers.length; row++) 
     { 
      for(int col = 0; col < testAnswers[row].length; col++) 
      { 
       testAnswers[row][col] = input.next().toCharArray(); 
      } 
     } 
     input.close(); 
+0

我们可以看到文本文件吗? –

+0

*但它似乎不起作用*不是很具描述性。请编辑您的问题,以添加描述您输入的信息,预期与实际输出,错误等。 – azurefrog

+0

当您尝试执行该代码时,您获得的错误是什么? – ivan

回答

1

的基本问题是,你想一个字符数组分配到的东西,是为了保持字符。您可能会认为char[]类型是存储记录字符的内存中的位置,以及char类型是字符本身。

当您在String上致电toCharArray()时,返回类型为char[]。它看起来像你期望这个数组有一个单一的字符,如多选题测试的A,B,C或D。你可以像...toCharArray()[0]那样获得该数组的第一个(也是唯一的?)字符,但这是浪费的,因为创建了一个新数组,并且从源字符串中复制了字符。直接在String上使用getCharAt()方法更简单。

String filename = "ArrayHW2.txt"; 
char[][] testAnswers = new char[50][5]; 
try (Scanner input = new Scanner(Paths.get(filename))) { 
    for(int row = 0; row < testAnswers.length; row++) { 
    for(int col = 0; col < testAnswers[row].length; col++) { 
     String token = r.next(); 
     if (token.length() != 1) 
     throw new IllegalArgumentException("Answers must be one character"); 
     testAnswers[row][col] = token.charAt(0); 
    } 
    } 
} catch (IOException ex) { 
    System.err.println("Error reading file: " + ex.getMessage()); 
    System.exit(1); 
} 
+0

'char []'不像可以找到'char'的内存地址,它是一个对象,它包含固定数量的“char”,连续存储在内存中。也许你正在考虑在某些情况下'char []'衰减到'char *'的地方。 –

+0

@erickson我明白你的意思,但我认为一个地址不适合char使用的16位的解释是红鲱鱼。即使地址的大小可能适合长时间占用的空间,您也不能将“long []”分配给“long”。仅仅说你不能将一个数组分配给一个原语就足够了。 –

+0

@KlitosKyriacou这是一个很好的观点。 – erickson

0
String filename = "ArrayHW2.txt"; 
     int numTests = 6; 
     char[][] testAnswers = new char[50][5]; 
     //char[] key = new char[4]; 

     Scanner input = null; 
     try 
     { 
      input = new Scanner(new File(filename)); 
     } 
     catch(FileNotFoundException e) 
     { 
      System.out.println("Error Opening File"); 
      System.exit(1); 
     } 
     int counter = 0; 
     while(scanner.hasNext()) 
     { 
      copyString(testAnswers[counter], scanner.nextLine()); 

     } 

     input.close(); 

它是一个虽然我没有代码的Java和IM不知道的方法,但认为这是一个伪代码。 您可以使用此副本:

void copyString(char[] arr, String x) 
{ 
    int size = x.length(); 
    for (int i=0; i<size; i++){ 
    arr[i] = x.CharAt(i); 
}