我正在尝试获取用户输入(普林斯顿Java课程的StdIn)并将其保存到char [] []中。输入格式如下:
0.........
1.........
2.........
3.........
4.........
..........
.........3
.........2
.........1
.........0
当我在cmd中使用javac编译并运行代码时,它可以工作并正确打印格式化的数组,但是在Eclipse中却变成一团糟。 这是我正在使用的代码:
int row = 10;
int col = 10;
char[][] input = new char[row][col];
for(int i = 0; i<10; i++) {
for (int j = 0; j<10; j++) {
input[i][j] = StdIn.readChar();
}
}
for (int i = 0; i<10; i++) {
for (int j = 0; j<10; j++) {
System.out.print(input[i][j]);
}
System.out.println();
}
应该以与输入相同的格式打印数组。
编辑:我发现了问题:StdIn.readChar()还将换行符读取为单个字符,并用它填充数组。有防止这种情况的优雅方法吗?
答案 0 :(得分:1)
您应该检查回车(CR)或换行(LF)字符,在Windows主机中,换行是使用CR + LF进行的,而在Linux上仅使用LF。
使用System.getProperties("line.separator")
或System.lineSeparator()
,您将获得一个字符串,该字符串包含用于启动新行的字符,具体取决于您的操作系统。
但是您可以使用java.util.Scanner或java.io.BufferedReader简化此过程
扫描仪示例:
int row = 10;
int col = 10;
char[][] input = new char[row][col];
Scanner in = new Scanner(System.in);
for(int i=0; i < row; i++){
input[i] = in.nextLine().toCharArray();
}
带有BufferedReader的示例(您还需要导入java.io.InputStreamReader,并且所使用的方法可能会引发IOException,因此,我认为使用Scanner更为简单,但是,如果需要的话。)
int row = 10;
int col = 10;
char[][] input = new char[row][col];
BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));
for(int i=0; i < row; i++){
input[i] = reader.readLine().toCharArray();
}
这两种实现方式非常相似,您可以选择自己喜欢的一种,我认为检查每个字符是否不同于CR(“ \ r”)和/或LF(“ \ n”)不方便< / p>
答案 1 :(得分:0)
您可以只使用扫描仪。 https://docs.oracle.com/javase/8/docs/api/java/util/Scanner.html
Scanner sc = new Scanner(System.in);
String line = sc.nextLine();
这样,您得到的行将没有任何CR或LF字符。