Java第四天——核心技術第三章(4)
字串
String類 雙引號括起來的 String s = “Enjoy!” ""表示空串
-
子串
String ss = s.substring(0,2); ss=“En”
substring(a,b) 子串位置是從0到2 ( 字串從0開始計數 )
易於計運算元串的長度: b-a -
拼接
String str = ss + s; ss和s都可以替換為直接的字串”xxxx” -
不可變字串
String類物件—不可變字串
因為在Java中String物件是在一個共享的儲存池中,變數指向儲存池中的相應位置,若想改變其變數的內容,只能改變變數的指向,不能改變儲存池中的資料(因為改變資料很麻煩,效率極低) ,所以叫做不可變字串。
-字串是否相等
ss.equals(s); 字串ss與字串s是否相等 ss,s可以是常量“xxx”
ss.equalsIgnoreCase(s); 不區分大小寫判斷是否相等
== 只能判斷兩個字串是否在同一位置 若判斷相等不可用
-
程式碼點與程式碼單元
s.length(); 程式碼單元數量(即為字串的長度)
s.codePointCount(0,s.length()); 程式碼點數量(即為實際的長度)
s.charAt(a); a在0~s.length()-1之間 位置為a的程式碼單元(字元)
s.offsetByCodePoints(a,b) 得到以a位置偏移b個的程式碼點 再根據程式碼點求出程式碼單元 -
String類的方法 java.lang.stirng
- boolean endsWith(String suffix) 若字串以suffix結尾,返回true
- int indexOf(String str)
- int indexOf(String str,int fromIndex)
- int indexOf(int cp)
- int indexOf(int cp,int fromIndex)
返回與字串str或程式碼點cp匹配的第一個子串的開始位置,從索引0或者fromIndex開始計算。若在原始串中不存在str,返回-1
lastIndexOf與indexOf相似,最後一個子串的開始位置,從索引原始串尾端或fromIndex開始計算 - String substring(int beginIndex)
- String subString(int beginIndex,int endIndex)
返回一個新字串(包含原始字串從beginIndex到串尾endIndex-1的所有程式碼單位 - String toLowerCase() 返回一個新字串,大寫變小寫
- String toUpperCase() 返回一個新的字串,小寫變大寫
- String trim() 返回一個新字串,刪除了原始字串頭部和尾部的空格
務必用好API
-
字串構建 java.lang.StringBuilder
StringBuilder builder = new StringBuilder(); 構建一個空的字串構建器
builder.sppend(“sss”); 新增一部分內容 append()
builder.toString(); 用toString()構造字串String型別
bulider.length(); 求出其構建器或者緩衝器的程式碼單位數量(長度)
builder.setCharAt(0,‘r’); 將builder中的第0個程式碼單元位置設定為‘r’ -
輸入輸出
- 讀取輸入 import java.util.*;
Scanner sc = new Scanner(System.in);
String line = sc.nextLine(); 輸入一行 輸入中可以包含空格
String word = sc.next(); 輸入一個單詞 以空白符’ 作為分隔符
sc.nextInt() 輸入一個整數
sc.nextDouble() 輸入一個浮點數
- 讀取輸入 import java.util.*;
import java.util.*;
/* 展示讀取輸入 */
public class InputTest{
public static void main(String[] args){
Scanner in = new Scanner(System.in);
System.out.print("What is your name?");
String name = in.nextLine(); //輸入第一個字串
System.out.print("How old are you?");
int age = int.nextInt(); //輸入第二個整數
System.out.println("Hello,"+name+",Next year,you'll be "+(age+1)); //輸出Hello,XXX,Next year,you'll be XX
}
}
注意:從控制檯讀取密碼使用Console類 每次只能讀取一行輸入 沒有讀取單個單詞或數值的方法
(可能進行互動操作時使用,通過控制檯視窗為互動的使用者返回一Console物件,否則,返回null。
對於任一通過控制檯視窗啟動的程式,都可使用Console物件。否則,其可用性將與所使用的系統有關)
Console con = System.console();
String username = con.readLine("User name: ");
char[] passwd = con.readPassword("Password: "); 返回的密碼放到了一維字元陣列中,為了安全。
在對密碼處理後,應該立即用一填充值覆蓋陣列元素(一會兒會提到)
java.util.Scanner.* 除上面提到的 補充:
- boolean hasNext() 檢測輸入中是否還有其他單詞
- boolean hasNextInt()
- boolean hasNextDouble() 檢測是否還有表示整數或浮點數的下一個字元序列
java.io.Console.*
- static char[] readPassword(String prompt,Object …args)
- static String readLine(String prompt,Object …args) 顯示字串prompt並讀取輸入,直到輸入行結束。args引數設定輸入格式(下一節講)
- 格式化輸出
- System.out…print()
- System.out.println()
- System.out.printf(“Hello,%s.Next year,you’ll be %d”,name,age); %s代表name引數,%d代表age引數
s,d為轉換符
s 字串 Hello
c 字元 H
b 布林 True
h 雜湊碼 42628b2
tx 日期時間
% 百分號 %
n 與平臺有關的行分隔符
d 十進位制整數 158
x 十六進位制整數 9f
o 八進位制整數 237
f 定點浮點數 15.8
e 指數浮點數 1.58e+01
g 通用浮點數
a 十六進位制浮點數 0x1.fccdp3
System.out.printf("%8.2f",x) 用8個字元的寬度和小數點後兩個字元的精度列印x 若x=1000.0/3.0 則輸出為 3333.33(空格+3333.33 8個字元寬度 不夠的用空格進行佔位)
格式化輸出標誌 3333.33
+ +3333.33
空格 3333.33(空格+3333.33)
0 003333.33
- 3333.33(左對齊)
( (3333.33)將負數括在括號裡
, 3,333.33 新增分組分隔符
# 3,333 對於f格式 包含小數點
# 0xcafe 對於x或o格式 新增字首0x或0
$ 159 9F 給定被格式化的引數索引 %1x 將以十進位制和十六進位制格式列印第一個引數
< 159 9F 格式化前面說明的數值 %d%<x以十進位制和十六進位制列印同一個數值
格式化字串 String message = String.format(“Hello,%s.Next year,you’ll be %d”,name,age); 靜態方法 不列印輸出
- 檔案輸入輸出
Scanner in = new Scanner(new File(“File.txt”); 構造一個File類去讀取檔案 檔案輸入
檔案位於Java虛擬機器啟動路徑的相對位置,也可使用絕對路徑(在命令列方式下用java MyProg啟動程式,啟動路徑為命令直譯器的當前路徑。整合開發環境下,啟動路徑由IDE控制,可使用String dir = System.getProperty(“user.dir”);
若檔案中包含反斜槓符號 要在每一個反斜槓之前再新增一個反斜槓
PrintWriter out = new PrintWriter(“myfile.txt”); 寫入檔案 檔案輸出
注意:若用一個不存在的檔案構造Scanner,或用一個不能被建立的檔名構造一個PrintWriter,會發生異常。Java認為這種異常比“被零整除“異常還嚴重
當知道有可能出現“找不到檔案”的異常的時候,應該只編譯器:丟擲異常
public static void main(String[] args) throws FileNotFoundException{ Scanner in = new Scanner(new FIle("File.txt")); ...... }}
命令列方式下,可利用重定向將任一問價捆綁到System.in和System.out java MyProg<myfile.txt> output.txt 這樣就處理了FileNotFoundException異常
java.util.Scanner.*
Scanner(String data) 構造一個從給定字串讀取資料的Scanner
java.io.PrintWriter.*
PrintWriter(String filename) 構造 一個將資料寫入檔案的PrintWriter 檔名有引數指定
-
補充: Date型別
Date d = new Date(); Mon Feb 09 18:05:19 PST 2004日期和時間的轉換符 常用
c Mon Feb 09 18:05:19 PST 2004 完整的日期和時間
F 2004-02-09 ISO 8601日期
D 02/09/2004 美國格式的時間(月/日/年)
T 18:05:19 24小時時間
r 06:05:19 12小時時間printf方法特性:格式說明符語法
% 引數索引+$ 標誌 寬度 .+精度或t 轉換字元