我有一個數據文件,在多個連續行上有斜杠分隔的整數。這是我想用來讀取和打印所有這些整數的一小段代碼:import java.util.Scanner;import java.io.File;class Testing { public static void main (String[] args) throws Exception { Scanner file = new Scanner(new File("data.txt")); file.useDelimiter("/"); while (file.hasNextInt()) System.out.println(file.nextInt()); }}數據文件一如下所示:1/2/34/5/6數據文件一的輸出如下所示:12數據文件二如下所示:1/2/3數據文件二的輸出如下所示:123有人可以解釋為什么我會出現這種行為嗎?特別是,為什么第一個示例忽略第一行數據末尾的“3”的存在?注意:我知道幾種“更好”的方法來獲得我想要的行為:一次讀取整行并使用 split() 和 parseInt(),一次讀取整行并將其轉換為單獨的 Scanner 對象,等等。這不是我的問題。我試圖理解為什么這段特定的代碼不能按預期工作——特別是,為什么當文件有更多行時我得到的數據更少。
3 回答

holdtom
TA貢獻1805條經驗 獲得超10個贊
最后一個hasNextInt()
將讀取帶有回車符的元素。即該元素將為3\r\n
. 這顯然不是 int,因此它將無法通過測試file.hasNextInt()

有只小跳蛙
TA貢獻1824條經驗 獲得超8個贊
當它到達第 1 行末尾時,即值 3 之后,有一個“返回字符”,它不是整數。從那里開始,您對 hasNextInt() 的測試開始失敗。所以它最多只打印 3。即 1 2 3

30秒到達戰場
TA貢獻1828條經驗 獲得超6個贊
行尾旁邊的 1hasNextInt()將返回 false,因為它返回3\r\n,從而導致問題。
簡單的解決方案可以是 -
public static void main (String[] args) throws Exception {
Scanner file = new Scanner(new File("test.txt"));
file.useDelimiter("/");
while (file.hasNext())
System.out.println(file.next());
}
輸出現在看起來像 -
1
2
3
4
5
6
添加回答
舉報
0/150
提交
取消