在Java中,如何将文本文件中的值存储在数组中?

在Java中,如何将文本文件中的值存储在数组中?,java,Java,我在课堂上真的很难完成这项作业。我们正在制作一个数独程序,它接收一个包含如下信息的文本文件: . . . 9 . 2 6 . 4 6 . 4 3 . . . 7 . . 7 . 1 . 4 . . . . . 3 . 1 9 8 . . 1 5 . . 4 . . 9 7 . . 7 8 2 . 3 . . . . . 2 . 6 . 5 . . 3 . . . 7 1 . 2 9 . 2 5 . 1 . . . 并返

我在课堂上真的很难完成这项作业。我们正在制作一个数独程序,它接收一个包含如下信息的文本文件:

. . .   9 . 2   6 . 4
6 . 4   3 . .   . 7 .
. 7 .   1 . 4   . . .

. . 3   . 1 9   8 . .
1 5 .   . 4 .   . 9 7
. . 7   8 2 .   3 . .

. . .   2 . 6   . 5 .
. 3 .   . . 7   1 . 2
9 . 2   5 . 1   . . .
并返回一个包含正确数独答案的文本文件。现在,我甚至还没有开始研究做这件事所需的回溯算法。我所需要的帮助就是从我展示给你的文本文件中获取信息,并以这样的方式存储信息,以便我可以将这些回溯算法应用于从文本文件接收的数据

我编写了读取和显示(出于测试目的)文本文件的代码,即以下代码:

import java.io.BufferedReader;
导入java.io.FileReader; 导入java.io.IOException

公共级数独行者{

   int [][] sudoku;

   SudokuSolver(){
       sudoku = new int[9][9]; 
   }

   public void readinFile(){
       //SudokuSolver su = new SudokuSolver();
       System.out.println("Reading File from Java code");
       //Name of the file
       String fileName="C:\\puzzle1.txt";
       try{

       //Create object of FileReader
       FileReader inputFile = new FileReader(fileName);

       //Instantiate the BufferedReader Class
       BufferedReader bufferReader = new BufferedReader(inputFile);

       //Variable to hold the one line data
       String line;

       // Read file line by line and print on the console
       while ((line = bufferReader.readLine()) != null)   {

               System.out.println(line);
       }

       //Close the buffer reader
       bufferReader.close();

       }catch(Exception e){
               System.out.println("Error while reading file line by line:" 
               + e.getMessage());                      
       }

       }

   public static void main(String args[]) {
       SudokuSolver s = new SudokuSolver();
       s.readinFile();
   }

但所有这些都是读取文本文件。我的问题是:如何提取计算机解决数独问题所需的信息?我需要数字和“.”(因为需要“.”来告诉计算机这是一个空白)但不是文本文件中的空格。我曾尝试在internet上查找此内容,但对我来说很难理解,因为这部分内容(从文本文件中阅读部分内容)在课堂上根本没有涉及。如有任何帮助,将不胜感激!!!谢谢!

大量选项。我喜欢regex,那么这一点如何:

/** Describe a sudoku line. */
private static final Pattern SUDOKU_PATTERN = Pattern.compile("\s*([\.\d])\s*([\.\d])\s*([\.\d])\s*([\.\d])\s*([\.\d])\s*([\.\d])\s*([\.\d])\s*([\.\d])\s*([\.\d]).*");
private static final int CELL_COUNT = 0;

public List<Chararcter> parseLine(String line) {
  Matcher m = SUDOKU_PATTERN.matcher(line);
  List<Character> parsedLine = new ArrayList<Character>(9);
  int index = 0;
  while (i < CELL_COUNT) {
    parsedLine.add(m.group(i++));
  }
  return parsedLine;
}
/**描述一个数独台词*/
私有静态最终模式数独模式=模式。编译(“\s*([\.\d])\s*([\.\d])\s*([\.\d])\s*([\.\d])\s*([\.\d])\s*([\.\d])\s*([\.\d])\s*([\.\d]);
私有静态最终整数单元格计数=0;
公共列表行(字符串行){
匹配器m=数独模式匹配器(线);
List parsedLine=newarraylist(9);
int指数=0;
while(i
显然,需要大量的错误处理。我认为您也可以在
\s*([\.\d])周围使用非捕获组
后面跟一个所有格量词,使模式更简单。返回的
列表是输入行中数字和点的有序序列。进一步解析成数字的代码是留给做作业的人的练习。

编写Java时,您的#1资源总是Javadoc。查看他说,您将发现许多方法用于操作/提取包含的数据

你有很多选择。我提供两个:

1) 遍历
字符串
,并选择非空白字符

您可以通过循环来实现这一点:

for (char c : line.toCharArray()) 
{ 
    // check each character, convert to `int`, put in your array
} 
2) 使用
.split()
方法返回
字符串[]

.split()
采用。通过提供一个表示“在一个或多个空格上拆分”的正则表达式,您将返回每个数字,并将其作为
字符串

String[] elements = line.split("\\s+");

for (String s : elements) 
{
    // convert to `int`, put in your array
}

请注意,您还必须决定如何在
int[][]
中表示
。也许可以使用
-1

…我将尝试您的建议。谢谢!