1. 程式人生 > >javaAPI之string和date

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)