我试图使用扫描仪从txt文件中读取字符,然后我想创建一个2D数组,在其中放置所有字符,包括空格。
我的文本文件看起来像这样(我刚创建它可以尝试一些东西)
### ###
##
### ####
我的代码当前看起来像这样:
public class Sokoban7 {
File file;
Scanner sc;
Scanner bc;
String d;
static int lines;
static int lineLength;
static int maxChar;
int b;
String[][] array;
String line2;
int r;
int q;
int m;
int n;
public Sokoban7() throws Exception {
ArrayList<Character> list = new ArrayList<Character>();
file = new File("C:/Users/joaki/Desktop/sokoban/readin.txt");
sc = new Scanner(file);
sc.useDelimiter("s*");
sc.reset();
Character c = sc.next().charAt(0);
while (sc.hasNextLine()) {
list.add(c);
String line = sc.nextLine();
lines++;
if (line.length() > maxChar) {
maxChar = line.length();
}
}
sc.close();
array = new String[maxChar][lines];
bc = new Scanner(file);
bc.reset();
bc.useDelimiter("s*");
while (bc.hasNext()) {
d = bc.next();
for (int n = 0; n < lines; n++) {
line2 = "";
for (int m = 0; m < maxChar; m++) {
array[m][n] = d;
}
}
}
System.out.println(Arrays.deepToString(array));
bc.close();
}
public static void main(String[] args) throws Exception {
Sokoban7 g = new Sokoban7();
}
}
我需要一些建议,是否真的需要编写所有这些代码,或者有更快的方法吗?我无法同时计算行数和字符数,却又占用了相当多的空间,还有想法吗?
答案 0 :(得分:1)
我认为一种更好的方法是使用BufferedReader。使用Java 8,您可以执行以下操作:
final char[][] lines;
try (final BufferedReader reader = new BufferedReader(new FileReader(file))) {
lines = reader.lines()
// convert each line into a char[]
.map(line -> line.toCharArray())
// collect the lines into a char[][]
.toArray(char[][]::new);
}