4 回答

TA貢獻1946條經驗 獲得超4個贊
我認為Scanner
class 它更適合你的任務
Java 中的掃描器類位于 java.util 包中。Java 提供了多種讀取鍵盤輸入的方法,java.util.Scanner 類就是其中之一。
Java Scanner 類使用默認為空白的定界符將輸入分解為標記。它提供了許多方法來讀取和解析各種原始值。
Java Scanner 類廣泛用于使用正則表達式解析字符串和原始類型的文本。這是在 Java 中獲取輸入的最簡單方法。借助 Java 中的 Scanner,我們可以從用戶那里獲取原始類型的輸入,例如 int、long、double、byte、float、short 等。
Java Scanner 類擴展了 Object 類并實現了 Iterator 和 Closeable 接口。
Java Scanner類提供nextXXX()方法返回值的類型,如nextInt()、nextByte()、nextShort()、next()、nextLine()、nextDouble()、nextFloat()、nextBoolean()等. 要從掃描儀獲取單個字符,可以調用返回單個字符的 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貢獻1808條經驗 獲得超4個贊
我看過你的代碼。似乎通過使用它我已經檢測到通過使用 FileInputStream 它將在值之間產生一個空白空間。
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);
}
從那時起,您可以相應地調試它。在第 19 行,您的“i”返回一個空格或字符值 i。我建議改用掃描儀作為讀取文件的方式。

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

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