4 回答

TA貢獻(xiàn)1946條經(jīng)驗(yàn) 獲得超4個(gè)贊
我認(rèn)為Scanner
class 它更適合你的任務(wù)
Java 中的掃描器類位于 java.util 包中。Java 提供了多種讀取鍵盤輸入的方法,java.util.Scanner 類就是其中之一。
Java Scanner 類使用默認(rèn)為空白的定界符將輸入分解為標(biāo)記。它提供了許多方法來讀取和解析各種原始值。
Java Scanner 類廣泛用于使用正則表達(dá)式解析字符串和原始類型的文本。這是在 Java 中獲取輸入的最簡(jiǎn)單方法。借助 Java 中的 Scanner,我們可以從用戶那里獲取原始類型的輸入,例如 int、long、double、byte、float、short 等。
Java Scanner 類擴(kuò)展了 Object 類并實(shí)現(xiàn)了 Iterator 和 Closeable 接口。
Java Scanner類提供nextXXX()方法返回值的類型,如nextInt()、nextByte()、nextShort()、next()、nextLine()、nextDouble()、nextFloat()、nextBoolean()等. 要從掃描儀獲取單個(gè)字符,可以調(diào)用返回單個(gè)字符的 next().charAt(0) 方法。?
掃描器 Java 文檔
public static void main(String arg[]) {
? ? try (Scanner sc = new Scanner(new File("Resources/Map/spawn.txt"))) {
? ? ? ? // Checking if sc has another token in the file
? ? ? ? while(sc.hasNext()) {
? ? ? ? ? ? // Print line
? ? ? ? ? ? System.out.println(sc.next());
? ? ? ? }
? ? } catch (Exception ex) {
? ? ? ? // Use a Logger to log exceptions in real projects
? ? ? ? ex.printStackTrace();
? ? }
}
您也可以使用Apache Commons IO庫
? ? ? <dependency>
? ? ? ? <groupId>commons-io</groupId>
? ? ? ? <artifactId>commons-io</artifactId>
? ? ? ? <version>2.5</version>
? ? ? </dependency>
? ? import org.apache.commons.io.FileUtils;
? ? import java.io.File;
? ? import java.io.IOException;
? ? import java.util.List;
? ? public class ReadTextFile {
? ? ? ? public static void main(String[] args) throws IOException {
? ? ? ? ? ? try {? ? ? ?
? ? ? ? ? ? ? ? File f = new File("Resources/Map/spawn.txt");
? ? ? ? ? ? ? ? List<String> lines = FileUtils.readLines(f, "UTF-8");
? ? ? ? ? ? ? ? for (String line : lines) {
? ? ? ? ? ? ? ? ? ? System.out.println(line);
? ? ? ? ? ? ? ? }
? ? ? ? ? ? } catch (IOException e) {
? ? ? ? ? ? ? ? // Use a Logger to log exceptions in real projects
? ? ? ? ? ? ? ? e.printStackTrace();
? ? ? ? ? ? }
? ? ? ? }? ? ? ??
? ? }

TA貢獻(xiàn)1808條經(jīng)驗(yàn) 獲得超4個(gè)贊
我看過你的代碼。似乎通過使用它我已經(jīng)檢測(cè)到通過使用 FileInputStream 它將在值之間產(chǎn)生一個(gè)空白空間。
static char[][] spawnWorld = new char[30][30];
public static void main(String[] args) {
try {
FileInputStream spawn = new FileInputStream("C:/Daniel/spawn.txt");
int i = 0;
int h = 0;
int k = 0;
while ((i = spawn.read()) != -1) {
if (h == 30) {
h = 0;
k++;
}
spawnWorld[k][h] = (char) i;
if (h == 19) System.out.println((char) i);
System.out.println("[" + k + "][" + h + "] : " + i);
h++;
}
spawn.close();
} catch (Exception e) {
e.printStackTrace();
}
System.out.println("Start Printing");
for (int i = 0; i < 30; i++) {
for (int j = 0; j < 30; j++) {
System.out.println("[" + i + "][" + j + "] : " + spawnWorld[i][j]);
}
}
System.exit(0);
}
從那時(shí)起,您可以相應(yīng)地調(diào)試它。在第 19 行,您的“i”返回一個(gè)空格或字符值 i。我建議改用掃描儀作為讀取文件的方式。

TA貢獻(xiàn)1772條經(jīng)驗(yàn) 獲得超5個(gè)贊
將System.out.println
循環(huán)內(nèi)部更改為 just?System.out.print
。
System.out.println
每次都會(huì)自動(dòng)添加一個(gè)換行符,即使你只打印一個(gè)字符。?System.out.print
將接受String
您傳入的內(nèi)容,并按原樣打印。
此外,除非是故意的,否則請(qǐng)確認(rèn)您沒有\n
在每行末尾打?。〒Q行符)。如果你真的想在每一行的末尾開始一個(gè)新行,只需System.out.println();
在最內(nèi)層循環(huán)結(jié)束后放一行。

TA貢獻(xiàn)1851條經(jīng)驗(yàn) 獲得超3個(gè)贊
文本文件由一行中的字符組成,后跟行尾序列,通常是換行符或回車符后跟換行符。(這些也可以被認(rèn)為是行分隔符而不是行尾,最后一行可能不會(huì)跟一個(gè),這取決于文件的創(chuàng)建方式。)您正在逐個(gè)字符地讀取文件,但您沒有考慮這些行尾字符。
FileInputStream使用or沒有任何區(qū)別Scanner;問題是,您一次讀取文件一個(gè)字符,但不考慮回車和換行符。
例如:
while ((i=spawn.read()) != -1) {
if (Character.isWhitespace((char)i)) {
continue;
}
if (h == 30) {
h = 0;
k++;
}
spawnWorld[k][h] = (char)i;
h++;
}
添加回答
舉報(bào)