簡體   English   中英

在掃描儀中使用定界符; 忽略空格和換行

[英]Using a delimiter in scanner; ignoring spaces & new lines

美好的一天,

我正在嘗試使用掃描儀讀取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

使用掃描儀的nextline()和split()函數將結果讀取到二維數組中

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

對於二維數組,應使用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();
    }
}
public void Read() {
    String[] delimeter = { " ", "\\.", ",", "\\z"}
    for (String delimeter : delimeter)
    {
        Scanner scanner = new Scanner(args[0]);
            for (int i = 0; i < 8; i++) {
                for (int j = 0; j < 8; j++) {
                String a = s.next();
                board[i][j] = a;
            }
        }   
        scanner.useDelimiter(delimeter);
        String t = scanner.next();

    }

您可以使用掃描儀跳過方法(如下所示),模式“ \\ 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;
        }
    }   
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM