javaAPI之string和date
1 .JDK API JDK中包含大量的API類庫,所謂API(Application Programming Interface,應用程式程式設計介面)就是一些已寫好、可供直接呼叫的功能(在Java語言中,這些功能以類的形式封裝)。
JDK API 包含的類庫功能強大,經常使用的有:字串操作、集合操作、檔案操作、輸入輸出操作、網路操作、多執行緒等等。
JDK包結構: JDK中經常使用的包有:
包 功能 java.lang Java程式的基礎類,如字串、多執行緒等,該包中的類使用的頻率非常高,不需要import,可以直接使用 java.util 常用工具類,如集合、隨機數產生器、日曆、時鐘等 java.io 檔案操作、輸入/輸出操作 java.net 網路操作 java.math 數學運算相關操作 java.security 安全相關操作 java.sql 資料庫訪問 java.text 處理文字、日期、數字、資訊的格式
2 文件註釋 以/*開頭,以/結尾 通常加在類和方法的上方,用於說明作者,時間,版本,要實現功能的詳細描述等資訊; 用法: 1. 通過javadoc檢視檢視 2. 將整個專案的api文件匯出 步驟:選中要生成的文件,右擊export —–java—-javadoc—-finish。
3 .String 3.1 String是不可變的物件,本質是字元陣列 3.2 String物件的建立 – 2種方式 String物件的建立方式一:
String str = new String(); //空字元
String str = new String(“abc”) //此物件的值為abc
String物件建立的方式二:
String str = “hello”; //建立了一個String物件
“”:叫做字串直接量
物件的儲存位置:
字串常量池 -- JDK1.7之前在方法區,之後在堆中
字串常量池儲存字串直接量:
特點:
字串常量池中儲存的是字串直接量,儲存的物件是唯一存在的。建立String直接量物件時先去找這個值是否存在,如果存在,直接讓引用指向,如果不存在,再開闢空間。
//可能建立2個物件 1.bc”字串直接量如果常量池沒有這個物件,那麼建立, 2.new String() String s1 = new String(“abc”);
3.3 常用方法: —構造方法 —方法:
length()
public static void main(String[] args) {
/*
* length()返回此字串的字元個數
*/
String str = " hello world ";
System.out.println(str.length());
}
indexOf() :如果找不到,返回-1
/*
* int - indexOf(int char)
* 返回指定字元在字串中第一次出現的下標
*/
String str = "helloworld";
int index = str.indexOf('l');
int index1 = str.indexOf("ll");
System.out.println(index);
System.out.println(index1);
/*
* indexOf(String str,int fromIndex) - int
* 從指定fromIndex索引處開始查詢子字串str第一次
* 出現的下標
*/
int index2 = str.indexOf("l", 3);
System.out.println(index2);
/*
* lastIndexOf(String str) - int
* 找到指定子字串在字串中最後一次出現的
* 索引
*/
int index4 = str.lastIndexOf("l");
System.out.println(index4);
}
–練習:統計一個子串在父串中出現的次數 String str = “you can you up ,I can I do,no can no say anything can” indexOf(String str,int from)
程式碼實現:
public static void main(String[] args) {
String str = "you can you up ,"
+ "I can can I do,no can no XX";
int fromIndex = 0;
int index = 0;
String subStr = "can";
int count = 0;
while(index!=-1){
index = str.indexOf(subStr, fromIndex);
if(index!=-1){
count++;
fromIndex = index+subStr.length();
}
}
System.out.println(
substring()—練習:擷取域名見api文件
www.baidu.com
www.tedu.cn
www.oracle.com
程式碼實現:
/*練習:擷取域名
*
*/
main方法中:
String baiduAddress = "https://www.baidu.cn.com";
String teduAddres = "https://www.tedu.cn";
String oracleAddress = "https://www.oracle.com";
SubStringDemo demo = new SubStringDemo();
String name1 = demo.subCompanyName(baiduAddress);
String name2 = demo.subCompanyName(teduAddres);
String name3 = demo.subCompanyName(oracleAddress);
System.out.println(name1);
System.out.println(name2);
System.out.println(name3);
}
//對傳過來的網址進行域名擷取
public String subCompanyName(String address){
//獲取網址中第一次和第二次.出現的索引
int beginIndex = address.indexOf('.');
int endIndex = address.indexOf('.', beginIndex+1);
String name =
address.substring(beginIndex+1, endIndex);
return name;
}
trim()
charAt()
- 練習:迴文(對稱字串)判斷 上海自來水來自海上 9 上海自來來自海上 8
程式碼實現: /* * 對字串進行迴文判斷 */
public void check(String dest){
//對字串進行判斷
for(int i=0;i<dest.length()/2;i++){
char c1 = dest.charAt(i);
char c2 = dest.charAt(dest.length()-1-i);
//比較
if(c1!=c2){
System.out.println("不是迴文!");
Return;
}
}
System.out.println("是迴文!");
startsWith(String prefix) - boolean
endsWith(String suffix) – Boolean
程式碼實現:
/*
* startsWith(String prefix) - boolean
* 判斷字串是否以指定的字首開始
*/
String str = "i believe i can fly";
boolean flag = str.startsWith("i be");
System.out.println(flag);
flag = str.endsWith("fly");
System.out.println(flag);
}
toUpperCase()
toLowerCase()
程式碼實現:
/*
* toUpperCase() - String
* 將字串中的所有英文轉換為大寫
*/
String str = "adfdAFDfFDd";
str = str.toUpperCase();
System.out.println(str);
/*
* toLowerCase() - String
* 將字串中的所有字母轉換成小寫
*/
str = str.toLowerCase();
System.out.println(str);
}
static valueOf(資料型別 變數名) – String
:返回指定型別引數的字串表示
練習:、
class A{
main(String[] args){
String s = "good";
char[] ch = {g,h,f};
A a = new A();
a.change(s,ch);
System.out.println(s); //good
System.out.println(ch); // k h f
}
public void change(String s1,char[] chs){
s1 = "mm";
chs[0] = "k";
}
4.StringBuilder與 StringBuffer 區別: StringBuffer是執行緒安全的,效能會慢 StringBuilder是執行緒不安全的,效能會高
StringBuilder提供了一個可變的字元陣列,所以字串內容的修改都是在這個陣列中進行,而不會每次修改都建立一個新物件.
使用: 1. 構造方法 2. 方法: a) append(String str) b) toString() 程式碼案例: /* * StringBuilder:提供了一個可變的字元陣列 * 可以在這個類的物件中進行字串 的拼接 * 構造方法: * StringBuilder():提供預設的初始容量為16個字元 * StringBuilder(String str): * 建立一個字串生成器,初始值為str * */
// StringBuilder builder = new StringBuilder();
String str = "hello";
//現要在str的基礎上拼接新內容
StringBuilder builder2 =
new StringBuilder(str);
System.out.println(builder2);
/*
* StringBuilder很多方法的返回值為StringBuilder
* 型別,其實返回的是return this
* 所以,StringBuilder拼接之後的物件其實還是原物件
*/
// StringBuilder sb1 = // builder2.append(“world”); // System.out.println(builder2==sb1);
/*
* 經常的用法
*/
builder2.append("world")
.append("test").append("ok");
/*
* StringBuilder是一個字串生成器,其存在的
* 意義在於對字串的內容進行修改,修改完成之後
* 要得到對應的字串表示
* 通過toString()方法完成, -- String
*/
String dest = builder2.toString();
System.out.println(dest);
c) insert(int destOffSet,String str) d) delete(int start,int end) e) replace(int strat,int end,String str) f) reverse() 程式碼實現: /* * insert(int offset,String str) - StringBuilder * 將給定的字串插入到字元陣列的指定位置 */
String str = "hello";
StringBuilder sb = new StringBuilder(str);
sb.insert(2, "world");
System.out.println(sb); //heworldllo
/*
* delete(int start,int end) - StringBilder
* 從字元陣列中刪除指定位置開始,到指定位置結束的字元
* 邊界值包頭不包尾
*/
sb.delete(2, 7);
System.out.println(sb);
/*
* replace(int start,int end,String str) - StringBuilder
* 用給定的字串替換掉從指定位置開始,到指定位置
* 結束期間的字串
* 兩個邊界值依然是包頭不包尾
* hello ll -- 換成 替換字元
*/
sb.replace(2, 4, "替換字元");
System.out.println(sb);
/*
* reverse():反轉 - StringBuilder
*/
sb.reverse();
System.out.println(sb);
注意點: StringBuilder的很多方法的返回值均為StringBuilder型別。這些方法的返回語句均為:return this。 java的字串連線的過程是利用StringBuilder實現的
StringBuffer和StringBuilder StringBuffer和StringBuilder作用一樣,方法也一樣,api也一樣。
5 .日期操作 5.1 Date:java.util 構造方法: Date():建立一個Date()物件,此物件表示當前時間 Date(long ms):建立一個Date物件,表示ms指向的時間物件 方法:
getTime():得到當前時間-曆元 差值的毫秒錶示 – long
setTime
/* * 構造方法: * Date():創建出來的物件表示當前時間 */
Date date = new Date();
System.out.println(date);
/*
* getTime(): - long ms
* 返回當前時間-曆元(紀元)時間的毫秒錶示
*/
long currentMills = date.getTime();
System.out.println(currentMills);
/*
* 構造方法:
* Date(long ms) - Date
*/
long tomorrow = currentMills+24*60*60*1000;
Date toDate = new Date(tomorrow);
System.out.println(toDate);
5.2 Calendar Calendar是抽象類,其具體子類針對不同國家的日曆系統,其中應用最廣泛的是GregorianCalendar(格里高裡歷,即通用的陽曆),對應世界上絕大多數國家/地區使用的標準日曆系統。 日期類中:月份從0開始的 ,星期是從1開始的
得到Calendar物件 – 2種方式 1) 建立實現類物件 2) 呼叫靜態方法getInstanceof() a) getInstance()-會根據系統當前時區來建立子類物件(有可能會建立當地曆法物件),但是一般建立的都是GregorianCalendar物件
Calendar類中定義了一些日曆欄位(欄位摘要)
• 使用Calendar提供的get方法及一些常量可以獲取日期及時間分量 • static int YEAR 指示年份的欄位數字 • static int MONTH 指示月份的欄位數字 • static int DATE 指示一個月份中的第幾天 • static int DAY_OF_WEEK 指示一個星期中的某天,1為星期日
方法: GET方法: get(int Field) getTime() getTimeInMills() getActualMaximum(int field) /* * 得到Calendar物件2種方式 */ // Calendar calendar = new GregorianCalendar(); Calendar calendar = Calendar.getInstance();
/*
* 獲取當前時間的年,月,日,星期幾
* get(int Field)
* 欄位摘要:
* YEAR MONTH DATE DAY_OF_WEEK
*
* 日期類中:月份從0開始的
*/
int year = calendar.get(Calendar.YEAR);
int month = calendar.get(Calendar.MONTH)+1;
int date = calendar.get(Calendar.DATE);
int week = calendar.get(Calendar.DAY_OF_WEEK);
System.out.println(year);
System.out.println(month);
System.out.println(date);
System.out.println(week);
SET方法:
set(int Field,int value)
setTime(Date date)
add(int field,int amount)