如何读取文件并按行分割文本?

时间:2014-11-16 16:02:40

标签: java string

我需要阅读看起来像这样的文本文件

8 7
~~~~~~~
~~~~~~~
B~~~~~~
~~~~~~~
~~~~B~~
~~~~B~~
~~~~~~B
~~~~~~~
~~~~~~~

我的节目正在重建战舰游戏。我需要接受值8和7,但只从第二行打印。我应该使用string.split(我相信)。我需要打印带有〜和B的行。我已经有了用于读取文件的代码,我只是不确定如何通过换行符拆分文件。

File file = new File(args[1]);
    try 
        {
        Scanner sc = new Scanner(file);
        while (sc.hasNextLine()) 
            {
            String themap = sc.nextLine();          
            System.out.println(themap); 
            }
        sc.close();
        } 
    catch (Exception e) 
        {
        System.out.println("ERROR: File does not exist");
        }

2 个答案:

答案 0 :(得分:1)

您已经使用sc.nextLine()逐行阅读。它将逐行读取文件。没有必要使用拆分来获得每一行。要证明更改println语句以向您知道的每行添加内容,不在文件中。

System.out.println( "Yaya " + themap );

如果您在运行程序时在每行前面看到Yaya,那么您知道您正在逐行读取它,并且在每次循环时,地图指向文件中的一行。

之后,您只需要在该行内搜索以找到B和8并将其提取到另一个数据结构中。有很多方法可以做到这一点,但请查看String api以获取有助于此的方法。

答案 1 :(得分:0)

使用Java 8 PathsPathFiles.readAllLines和流(输入位于/tmp/layout.txt):

package stackoverflow;

import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.List;

public class StackOverflow {

    public static void main(String[] args) throws IOException {
        Path layout = Paths.get("/tmp", "layout.txt");
        List<String> lines = Files.readAllLines(layout);
        lines.remove(0); // Don't print the first line.
        lines.stream().forEach(System.out::println);
    }
}

如果您不能使用Java 8,请使用

for (String line : lines) {
    System.out.println(line);
}

而不是

lines.stream().forEach(System.out::println);