嗨,我真的很难做到这一点。我希望你能提供帮助。 我需要阅读" Levels"成阵列。 levels.txt看起来像这样。
1
#####
# #
#$ #
### $##
# $ $ #
### # ## # ######
# # ## ##### ..#
# $ $ ..#
##### ### #@## ..#
# #########
#######
; 2
############
#.. # ###
#.. # $ $ #
#.. #$#### #
#.. @ ## #
#.. # # $ ##
###### ##$ $ #
# $ $ $ $ #
# # #
############
所以我需要将level1作为例子放入Array [1]等。 这是我的代码。
public static void main(String[] args) {
ArrayList<String> arr = new ArrayList<String>();
try (BufferedReader br = new BufferedReader(new FileReader("levels(2).txt")))
{
String sCurrentLine;
while ((sCurrentLine = br.readLine()) != null) {
arr.add(sCurrentLine);
}
for (String s : arr) {
System.out.println(s);
}
} catch (IOException e) {
e.printStackTrace();
}
}
所以我的问题是我不知道如何从&#34;级别编号中分别阅读每个级别&#34;到&#34;;&#34;
答案 0 :(得分:0)
这是一个建议。
我故意不使用像你这样的FileReader
和BufferedReader
,而是更现代的Path
,Paths
和Files
(在Java 7中引入)。我首先将文件中的所有行读入列表,这是通过一次调用Files.readAllLines()
完成的。
我正在使用嵌套循环。外循环遍历级别(1,2等)。在循环内部,我首先找到具有级别编号的行,因为之前的任何行都应该被跳过。然后我采取行直到带分号的行(如果有的话;或者只是到文件的末尾)。
Path input = Paths.get("levels(2).txt");
List<String> inputLines = Files.readAllLines(input);
List<List<String>> levels = new ArrayList<>(); // result
levels.add(null); // put a null at index 0 so first level read will be at index 1
int levelNo = 1;
int lineNo = 0;
while (true) { // this loop will be terminated by break in the middle
// find level number in a line
String levelNoAsString = String.valueOf(levelNo);
while (lineNo < inputLines.size() && ! inputLines.get(lineNo).contains(levelNoAsString)) {
lineNo++;
}
if (lineNo == inputLines.size()) { // no more lines, the end
break;
}
lineNo++; // skip the line with the line no
// read level
List<String> currentLevel = new ArrayList<>();
while (lineNo < inputLines.size() && ! inputLines.get(lineNo).contains(";")) {
currentLevel.add(inputLines.get(lineNo));
lineNo++;
}
levels.add(currentLevel);
levelNo++;
}
答案 1 :(得分:-1)
public void loadLevels(String path){
String line;
StringBuilder realLine = new StringBuilder();
StringBuilder level = new StringBuilder();
int cpt = 0;
try{
BufferedReader buff = new BufferedReader(new FileReader(path));
while((line = buff.readLine()) !=null){
realLine.append(line);
while(realLine.length()<30){
realLine.append(" ");
}
cpt++;
level.append(realLine);
realLine.setLength(0);
if(cpt%12 == 0){
levels[(cpt/12)-1] = level.toString();
level.setLength(0);
}
}
}catch(FileNotFoundException fnfe){
System.out.println("Pas de fichier");
}catch(IOException ioe){}
}
我刚刚尝试过类似这样的东西时做了这个,就是从30个字符宽度和12个高度读取水平,希望它可以帮助你。