Java 中的 Scanner 類別是用來取得使用者輸入的強大工具。然而,它有一些鮮為人知的怪癖,可能會給開發人員帶來麻煩,特別是在使用不同的輸入類型時。以下深入探討一些關鍵的細微差別和常見問題的解決方案。
Scanner 類別的 nextLine() 方法對於讀取多行輸入至關重要。與僅讀取直到空格的 next() 不同,nextLine() 讀取直到換行符,這使其非常適合包含空格的輸入。
System.out.println("Enter Customer's Full Name, Email, Age, and Credit Limit"); Scanner sc = new Scanner(System.in); // Using nextLine() for full name (handles spaces) and next() for single-word inputs ScannerInput customer = new ScannerInput(sc.nextLine(), sc.next(), sc.nextInt(), sc.nextDouble());
在此範例中,nextLine() 用於捕獲帶空格的全名。這讓我們可以處理像“Arshi Saxena”這樣的輸入,而無需將它們分成單獨的標記。
當您在 nextLine() 之前使用 nextInt()、next() 或 nextDouble() 時,緩衝區中剩餘的任何換行符 (n) 都會幹擾您的輸入流。例如:
System.out.println("Enter a number:"); int number = sc.nextInt(); sc.nextLine(); // Clear the newline from the buffer System.out.println("Enter a sentence:"); String sentence = sc.nextLine();
這裡在sc.nextInt()後面添加了sc.nextLine(),用於清除換行符,防止其立即被後面的nextLine()讀取為輸入。
組合不同類型的輸入時,請記得仔細管理緩衝區:
在 nextInt() 或 nextDouble() 等任何方法之後立即使用 nextLine() 來消耗剩餘的換行符。
考慮為不同的輸入類型建立單獨的方法以避免混淆。
使用後請務必關閉 Scanner 實例以釋放資源。
這是一個示範 nextLine() 用法和清除緩衝區的實際範例:
Scanner sc = new Scanner(System.in); System.out.println("Enter Customer's Full Name, Email, Age, and Credit Limit"); ScannerInput c1 = new ScannerInput(sc.nextLine(), sc.next(), sc.nextInt(), sc.nextDouble()); System.out.println("Enter Alias:"); sc.nextLine(); // Clear buffer String alias = sc.nextLine(); System.out.println("Alias is " + alias);
這些技巧將有助於確保更順暢的輸入處理並最大限度地減少應用程式中的意外行為。
編碼快樂!
以上是探索 Java Scanner 類別的細微差別的詳細內容。更多資訊請關注PHP中文網其他相關文章!