将文本从特定字符读入数组到另一个特定字符。(JavaFx)

时间:2017-02-28 13:23:21

标签: java arrays text-files

嗨,我真的很难做到这一点。我希望你能提供帮助。 我需要阅读" 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;

2 个答案:

答案 0 :(得分:0)

这是一个建议。

我故意不使用像你这样的FileReaderBufferedReader,而是更现代的PathPathsFiles(在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个高度读取水平,希望它可以帮助你。