[英]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.