在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
…我将尝试您的建议。谢谢!