1. 程式人生 > >Java第四天——核心技術第三章(4)

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.*;

/*    展示讀取輸入  */
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 給定被格式化的引數索引 %1dd, %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 轉換字元