[問題] 多行輸入+格式判斷 by useDelimiter
小弟我現在有筆資料如下:
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
→
04/20 21:20, , 1F
04/20 21:20, 1F
→
04/20 21:30, , 2F
04/20 21:30, 2F
→
04/20 21:32, , 3F
04/20 21:32, 3F
→
04/20 21:41, , 4F
04/20 21:41, 4F
目前找到了可行的方法...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)
→
04/20 22:01, , 5F
04/20 22:01, 5F
謝謝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)
討論串 (同標題文章)
以下文章回應了本文:
完整討論串 (本文為第 1 之 2 篇):