作者YCK (Y.C.K)
看板java
标题[问题] 多行输入+格式判断 by useDelimiter
时间Tue Apr 20 21:12:30 2010
小弟我现在有笔资料如下:
5, 3, 0, 0, 7, 0, 0, 0, 0
6, 0, 0, 1, 9, 5, 0, 0, 0
0, 9, 8, 0, 0, 0, 0, 6, 0
8, 0, 0, 0, 6, 0, 0, 0, 3
4, 0, 0, 8, 0, 3, 0, 0, 1
7, 0, 0, 0, 2, 0, 0, 0, 6
0, 6, 0, 0, 0, 0, 2, 8, 0
0, 0, 0, 4, 1, 9, 0, 0, 5
0, 0, 0, 0, 8, 0, 0, 7, 9
然後我用下面的code将这样一组资料读入阵列
Scanner input = new Scanner(System.in).useDelimiter(", |\n");
int[][] grid = new int[9][9];
for (int i = 0; i < 9; i++) {
for (int j = 0; j < 9; j++) {
if(input.hasNextInt())
grid[i][j] = input.nextInt();
System.out.println("TEST!!!!"+" i:"+i+" j:"+j
+"grid["+i+"]"+"["+j+"] = "+grid[i][j]);
}
}
问题来了...当我在netBean底下这样做没有问题.
但当我用windows的"命令提示字元"
下达
javac test.java
java test < testData
除了第一列的资料有读进之外,其余都会变成0....
请问这是怎麽一回事呢? 找了老半天的资料找不出所以然来.
请java版的前辈们指点指点!
p.s.
我知道可以用string的方式读入一整行再做切割,
但我更想知道上面那样作法的问题在哪.
所以还麻烦各位帮帮忙了!
--
诸葛亮 :「鲁肃,近来可好?」
鲁肃 :「安然无恙。」
诸葛亮 :「鲁夫人呢?」
鲁肃 :「他应该在伟大的航道上。 」
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 118.233.40.239
1F:→ tkcn:似乎是 \r 问题? 还有不是都变成 0 ,而是读到非数字 04/20 21:20
2F:→ YCK:Orz..我这边除了第一笔全都是0 04/20 21:30
3F:→ YCK:有时在第一行资料之後会全为0,有时候第一行读完之後就会挂掉 04/20 21:32
4F:→ YCK:挂掉的部份已经修正,其余用E附加入内文 04/20 21:41
目前找到了可行的方法...code如下:
Scanner input = new Scanner(System.in).useDelimiter(", |\n|\r");
int[][] grid = new int[9][9];
for (int i = 0; i < 9; i++) {
for (int j = 0; j < 9; j++) {
if(input.hasNextInt())
grid[i][j] = input.nextInt();
System.out.println("TEST!!!!"+" i:"+i+" j:"+j+"
grid["+i+"]"+"["+j+"] = "+grid[i][j]);
}
if(input.hasNextLine())
input.nextLine();
}
另外想请问:
\r:是回到当前行的行首
\n:换行後回到刚行的行首
上面这两个应该没错
那位什麽我还要在Delimiter里面多加\r呢?
当我读完第一行的资料
5, 3, 0, 0, 7, 0, 0, 0, 0
6, 0, 0, 1, 9, 5, 0, 0, 0
他不是应该会自动换行到第二行的行首吗?(以\n作结)
还是说第一行的尾巴并非是以\n作为结束而是以\r?
※ 编辑: YCK 来自: 118.233.40.239 (04/20 21:49)
5F:→ tkcn:google: "carriage return" & "line feed" 04/20 22:01
谢谢tkcn的提示!
我找到一个看似有用的参考资料
http://tinyurl.com/y2sw3l8
原网址:
http://www.maxi-pedia.com/Line+termination+line+feed+versus+carriage+return+0d0a
供以後看到这篇文章的人参考!
※ 编辑: YCK 来自: 118.233.40.239 (04/20 22:11)