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
在每行末尾打印(换行符)。如果你真的想在每一行的末尾开始一个新行,只需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++;
}
添加回答
举报