使用 Scanner 在 Java 中讀取日期
瀏覽人數:473最近更新:
一、概述
在本快速教程中,我們將學習從Scanner
讀取Date
。我們假設日期格式是yyyy-MM-dd
並且日期是Scanner
的唯一內容。
2. 將輸入解析為 LocalDate
Scanner
API 提供了一個簡單的文本掃描器。由於我們的Scanner
有一個獨特的元素,我們將使用next()
方法來獲取它。否則,我們可能應該先做一些初步的工作來解析它。
此外,Java 8 引入了全新的 Date/Time API。讓我們創建一個具有給定格式的DateTimeFormatter
並解析結果LocalDate
:
LocalDate scanToLocalDate(String input) {
try (Scanner scanner = new Scanner(input)) {
String dateString = scanner.next();
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy-MM-dd");
return LocalDate.parse(dateString, formatter);
}
}
Scanner
類實現了AutoCloseable
接口,因此我們可以使用try-with-resources
來創建我們的Scanner
。此塊負責自動關閉Scanner
資源。
總而言之,我們可以檢查我們的代碼返回的LocalDate
是否與我們通過直接解析輸入獲得的相同。鑑於我們將我們的課程命名為DateScanner
:
@Test
void whenScanToLocalDate_ThenCorrectLocalDate() {
String dateString = "2018-09-09";
assertEquals(LocalDate.parse(dateString, DateTimeFormatter.ofPattern("yyyy-MM-dd")), new DateScanner().scanToLocalDate(dateString));
}
3. 將輸入解析為日期
對於比 Java 8 更早的版本,我們可以改用原始的Date
API。主要區別在於我們現在需要創建一個DateFormat
來解析我們的Date
:
Date scanToDate(String input) throws ParseException {
try (Scanner scanner = new Scanner(input)) {
String dateString = scanner.next();
DateFormat formatter = new SimpleDateFormat("yyyy-MM-dd");
return formatter.parse(dateString);
}
}
同樣,我們可以測試方法輸出的一致性:
@Test
void whenScanToDate_ThenCorrectDate() throws ParseException {
String dateString = "2018-09-09";
assertEquals(new SimpleDateFormat("yyyy-MM-dd").parse(dateString), new DateScanner().scanToDate(dateString));
}
此外,讓我們指出try-with-resources
是在 Java 7 中引入的。對於較早的版本,我們需要手動關閉Scanner
資源。
4。結論
在本文中,我們將Scanner
輸入解析為LocalDate
。然後,我們看到了與 Java 的早期Date
API 等效的代碼。
與往常一樣,代碼在 GitHub 上可用。
本作品係原創或者翻譯,採用《署名-非商業性使用-禁止演繹4.0國際》許可協議