在扫描仪中使用定界符;忽略空格和换行

时间:2018-08-26 09:47:59

标签: java arrays java.util.scanner

美好的一天,

我正在尝试使用扫描仪读取txt文件,并将字符保存到2D字符串数组中。 txt文件由8行字符组成,不能用空格分隔。如果字符之间用空格隔开,则我的程序有效(如果您删除了分隔符),或者如果所有字符都在一行中,则我的程序可以有效(如果包括定界符)而没有空格。

如果有人可以告诉我如何正确保存字符,将不胜感激。问题出在带有双for循环的Read()函数中。我尝试添加另一个定界符(s.useDelimiter(s.nextLine())),但我不知道如何实现。

请记住,这是我第一次使用扫描仪扫描文件,而我只是在学习编程,因此我的代码不会很先进。

亲切的问候, 马修

import java.util.Scanner;
import java.io.File;
import java.io.FileNotFoundException;

public class BoardFile {

    String[][] board = new String[8][8];
    Scanner s;

    // Print the board
    public void Printboard() {
        for (int i = 0; i < 8; i++) {
            for (int j = 0; j < 8; j++) {
                System.out.print(board[i][j]);
            }
            System.out.println();
        }
    }

    public void Open() {
        try {
            s = new Scanner(new File("**TXT FILE PATHNAME HERE**"));
        } catch (FileNotFoundException e) {
            System.out.println("Error");
        }
    }

    public void Read() {
        s.useDelimiter("");
        for (int i = 0; i < 8; i++) {
            for (int j = 0; j < 8; j++) {
                String a = s.next();
                board[i][j] = a;
            }
        }   
    }

    public static void main(String[] args) {
        BoardFile a = new BoardFile();
        a.Open();
        a.Read();
        a.Printboard();
    }
}

txt文件: https://www.dropbox.com/s/k8fkneg2dcw0cbe/abcde.txt?dl=0

4 个答案:

答案 0 :(得分:0)

使用扫描仪的nextline()和split()函数将结果读取到二维数组中

public void Read() {
        for (int i = 0; i < 8; i++) {
                board[i]= s.nextLine().split("");
            }
        }   

答案 1 :(得分:0)

对于二维数组,应使用char [] []而不是String [] [] 这是有效的程序。

package com.jvit.vm;

import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;

public class BoardFile {

    char[][] board = new char[8][8];
    Scanner s;

    // Print the board
    public void Printboard() {
        for (int i = 0; i < 8; i++) {
            for (int j = 0; j < 8; j++) {
                System.out.print(board[i][j]);
            }
            System.out.println();
        }
    }

    public void Open() {
        try {
            s = new Scanner(new File("test.txt"));
        } catch (FileNotFoundException e) {
            System.out.println("Error");
        }
    }

    public void Read() {
        s.useDelimiter("\n");
        for (int i = 0; i < 8; i++) {
            char[] chars = s.next().toCharArray();
            for (int j = 0; j < 8; j++) {
                board[i][j] = chars[j];
            }
        }
    }

    public static void main(String[] args) {
        BoardFile a = new BoardFile();
        a.Open();
        a.Read();
        a.Printboard();
    }
}

答案 2 :(得分:0)

connection.setRequestProperty("Cookie","");

答案 3 :(得分:0)

您可以使用扫描仪跳过方法(如下所示),模式“ \ n *”表示输入中的一个或多个换行符

public void Read() {
    s.useDelimiter("");
    for (int i = 0; i < 8; i++) {
        for (int j = 0; j < 8; j++) {
            s.skip("\n*");
            String a = s.next();
            board[i][j] = a;
        }
    }   
}