日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

Java学习笔记(十)--控制台输入输出

發布時間:2025/3/21 java 42 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Java学习笔记(十)--控制台输入输出 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

輸入輸出

一、控制臺輸入

在程序運行中要獲取用戶的輸入數據來控制程序,我們要使用到 java.util 包中的 Scanner 類。當然 Java 中還可以使用其他的輸入方式,但這里主要講解 Scanner 類方法。關于 Scanner 類我們可以直接通過了解它的 API 文檔來使用它。

Scanner 類定義在 java.util 包中。當使用的類不是定義在基本 java.lang 包中時,一定要使用 import 關鍵字導入相應的包。

要通過控制臺進行輸入,首先需要構造一個 Scanner 對象,并與 “標準輸入流” System.in 關聯。

Scanner in = new Scanner(System.in);

構造完對象之后,我們就可以使用 Scanner 類的各種方法來實現輸入操作了。

1.1 獲取字符串

使用 Scanner 類的 next() 與 nextLine() 方法獲取輸入的字符串。在讀取前我們一般需要 使用 hasNext 與 hasNextLine 判斷緩沖區是否有輸入的數據,返回值為布爾值。

1、String next()

讀取輸入的第一個單詞(以空格作為分隔符)

String str = in.next();
  • 一定要讀取到有效字符后才可以結束輸入。
  • 對輸入有效字符之前遇到的空白,next() 方法會自動將其去掉。
  • 只有輸入有效字符后才將其后面輸入的空白作為分隔符或者結束符。

接收到一個數據之后,空白之后的其他內容即將繼續存在緩存中。一定要將緩存區的內容處理,否則會影響后面的輸入接收。

2、String nextLine()

讀取輸入的一行內容。

String str = in.nextLine();
  • 以Enter為結束符,也就是說 nextLine()方法返回的是輸入回車之前的所有字符。字符串允許包含空格。

1.2 讀取數字

如果要輸入整型或浮點型的數據,在 Scanner 類中也有支持,但是在輸入之前最好先使用 hasNextXxx() 方法(返回值為布爾類型)進行輸入的類型驗證,再使用 nextXxx() 來讀取。

想要讀取一個整數,可以調用 nextInt() 方法。

int i = in.nextInt();

與此類似,想要讀取浮點數可以使用 nextDouble() 方法。更多方法請自行閱讀 Scanner 類方法。

1.3 讀取密碼

因為輸入是可見的,所以 Scanner 類不適用于從控制臺讀取密碼。我們可以使用 Console 類來實現這個目的。

Console cons = System.console(); String username = cons.readLine("User name: "); char[] passwd = cons.readPassword("PassWord: ");

為了安全起見,返回的密碼存放在一個一維數組中,而不是字符串中。在對密碼進行處理之后,應該馬上用一個填充值覆蓋數組元素。

例:實現獲取用戶名和密碼,并將其打印出來。

import java.io.Console;public class TestConsole {public static void main(String[] args) {Console cons = System.console();String username = cons.readLine("User name: ");char[] passwd = cons.readPassword("PassWord: ");System.out.println("User name: " + username);System.out.println("PassWord: " + String.valueOf(passwd));} }

運行結果

注意:java.io.Console 只能用在標準輸入、輸出流未被重定向的原始控制臺中使用,在 Eclipse 或者其他 IDE 的控制臺無法使用。

1.4 關于緩沖區問題

在控制臺輸入數據時,如果輸入的內容類型與接收預設的類型不一致,將拋出錯誤并終止程序。可以其他方法檢測或跳過可能出錯的語句。

如果使用 hasNextXx() 方法判斷輸入的類型,用戶輸入的內容還是存在緩存中,直到將數據接收或程序終止。可以通過 nextLine() 方法將緩存中的內容接收,以達到清空緩沖區中的內容。也可以重新構造原來的 Scanner 對象。

import java.util.*; public class First {public static void main(String[] args) {Scanner scan = new Scanner(System.in);// 從鍵盤接收數據int i = 0;float f = 0.0f;scan = new Scanner(System.in);System.out.print("輸入整數:");if (scan.hasNextInt()) {// 判斷輸入的是否是整數i = scan.nextInt();// 接收整數System.out.println("整數數據:" + i);} else {// 輸入錯誤的信息System.out.println("輸入的不是整數!");scan.nextLine(); // 處理緩存區內容//或者 scan = new Scanner(System.in);}System.out.print("輸入小數:");if (scan.hasNextFloat()) {// 判斷輸入的是否是小數f = scan.nextFloat();// 接收小數System.out.println("小數數據:" + f);} else {// 輸入錯誤的信息System.out.println("輸入的不是小數!");}scan.close();} }

二、控制臺輸出

2.1 常用輸出方法

控制臺輸出可以使用 System.out.print() ,System.out.printf() , System.out.println() 等方法。

  • System.out.println():是最常用的輸出語句,它會把括號里的內容轉換成字符串輸出到輸出窗口(控制臺),并且換行,當輸出的是一個基本數據類型時,會自動轉換成字符串,如果輸出的是一個對象,會自動調用對象的toString();方法,將返回值輸出到控制臺。
  • System.out.print():與第一個很相似,區別就是上一個輸出后會換行,而這個命令輸出后并不換行。
  • System.out.printf():通過格式化文本和參數列表輸出。

2.2 格式化輸出

輸出格式化數字可以使用 printf() 和 format() 方法。

使用 System.out.printf() 方法在控制臺上顯示格式化輸出。

System.out.printf(format, item1, item2, ..., itemn);

這里的 format 是指一個由子串和格式說明符構成的字符串。格式說明符指定每個條目應該如何顯示。這里的條目可以是數值、字符、布爾值或字符串。簡單的格式說明符是以百分號 (%) 開頭的轉換碼。

2.2.1 用于 printf 的轉換符

轉換符類型舉例
d十進制整數159
x十六進制整數9f
o八進制整數237
f定點浮點數15.9
e指數浮點數1.59e+01
g通用浮點數-
a十六進制浮點數0x1.fccdp3
s字符串Hello
c字符H
b布爾True
h散列碼42628b2
tx日期時間x見下
%百分號%
n與平臺有關的行分隔符-

2.2.2 用于 printf 的標志

標志目的舉例
+打印正數和負數的符號+3333.33
空格在正數之前添加空格| 3333.33|
0數字前面補0003333.33
-左對齊|3333.33 |
(將負數括在括號內(3333.33)
,添加分組分隔符3,333.33
#(對于f格式)包含小數點3333.33
#(對于x或0格式)添加前綴0x或00xcafe
$給定被格式化的參數索引。如%1$d將以十進制打印第一個參數
<格式化前面說明的數值。如%d%<x以十進制和十六進制打印同一個數值

2.2.3 時間和日期的轉換符

在這里,使用以 t 開始,格式為 tx,x代表的內容如下表:

轉換符類型舉例
c完整的日期和時間周日 4月 19 11:51:37 CST 2020
FISO 8601 日期2020-04-19
D美國格式的日期(月/日/年)04/19/20
T24小時時間11:56:27
r12小時時間11:57:05 上午
R24小時時間沒有秒11:56
Y4位數字的年2020
y年的后兩位數字20
C年的前兩位數字20
B月的完整拼寫February
b或h月的縮寫Feb
m兩位數字的月04
d兩位數字的日(前面補0)09
e兩位數字的日(前面不補0)9
A星期幾的完整拼寫Monday
a星期幾的縮寫Mon
j三位數的年中的日子(前面補0),在001到366之間069
H兩位數字的小時(前面補0),0到23之間12
k兩位數字的小時(前面不補0),0到23之間12
I(i的大寫)兩位數字的小時(前面補0),0到12之間06
l(L的小寫)兩位數字的小時(前面不補0),0到12之間6
M兩位數字的分鐘(前面補0)05
S兩位數字的秒(前面補0)19
L三位數字的毫秒(前面補0)047
N九位數字的毫微秒(前面補0)020000000
P上午或下午的大寫標志PM
p上午或下午的小寫標志am
z從GMT起,RFC822數字位移+0800
Z時區CST
s從格林威治時間1970-01-01 00:00:00 起的秒數1587270316
Q從格林威治時間1970-01-01 00:00:00 起的毫秒數1587270331450

2.2.4 使用參數索引格式化輸出日期

Date date = new Date();System.out.printf("%1$s %2$tB%2$te日, %2$tY","data:",date); //輸出結果為 data: 四月19日, 2020

索引必須緊跟在%后面,并以$終止。參數索引值從1開始,而不是從0開始。

同樣還可以使用 < 標志。它指示前面格式說明中的參數將再次使用。

System.out.printf("%s %tB%<te日, %<tY","data:",date);

2.2.5 指定寬度和精度

舉例輸出
%5c輸出字符并在這個字符條目前面加4個空格
%6b輸出布爾值,在false值前加一個空格,在true值前加兩個空格
%5d輸出整個條目,寬度至少為5.如果該條目的數字位數小于5,就在數字前面加空格.如果該條目的位數大于5,則自動增加寬度
%10.2f輸出的浮點條目寬度至少為10,包括小數點、和小數點后兩位數字.這樣,給小數點前分配了7位數字. 如果該條目小數點前的位數小于7,就在數字前面加空格. 如果該條目小數點前的位數大于7,則自動增加寬度.
%10.2e輸出的浮點條目的寬度至少為10,包括小數點、小數點后面兩位數字和指數部分.如果按科學計數法顯示的數字位數小于10,就給數字前加空格
%12s輸出的字符串至少為12個字符.如果該字符串條目小于12個字符,就在該字符串前加空格.如果該字符串條目多余12個字符,則自動增加寬度

例子

public class PrintfDemo {public static void main(String[] args) {System.out.printf("%5.6f",12345678.12345678);System.out.println();System.out.printf("%8.4f",1.12);System.out.println();System.out.printf("%-8.4f",1.12);} } /*輸出: 12345678.1234571.1200 1.1200 */

關于格式化 format() 方法請閱讀 Java 學習筆記(七)–格式化字符串及格式化輸出 。

總結

以上是生活随笔為你收集整理的Java学习笔记(十)--控制台输入输出的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。