Java常用類筆記

字符串相關(guān)的類

String類及常用方法

String的特性

  • String類:代表字符串。Java 程序中的所有字符串字面值(如"abc")都作為此類的實例實現(xiàn)。
  • String是一個final類,代表不可變的字符序列。
  • 字符串是常量,用雙引號引起來表示。它們的值在創(chuàng)建之后不能更改。
  • String對象的字符內(nèi)容是存儲在一個final修飾的字符數(shù)組value[]中。
  • String實現(xiàn)了Serializable接口,表示字符串支持序列化。
  • String實現(xiàn)了Comparable接口,表示String可以比較大小。

常用API

  • int length():返回字符串的長度: return value.length

  • char charAt(int index):返回某索引處的字符return value[index]

  • boolean isEmpty():判斷是否是空字符串:return value.length == 0

  • String toLowerCase():使用默認(rèn)語言環(huán)境,將 String 中的所有字符轉(zhuǎn)換為小寫

  • String toUpperCase():使用默認(rèn)語言環(huán)境,將 String 中的所有字符轉(zhuǎn)換為大寫

  • String trim():返回字符串的副本,忽略前導(dǎo)空白和尾部空白

  • boolean equals(Object obj):比較字符串的內(nèi)容是否相同

  • boolean equalsIgnoreCase(String anotherString):與equals方法類似,忽略大小寫

  • String concat(String str):將指定字符串連接到此字符串的結(jié)尾。 等價于用“+”

  • int compareTo(String anotherString):比較兩個字符串的大小

  • String substring(int beginIndex):返回一個新的字符串,它是此字符串的從beginIndex開始截取到最后的一個子字符串。

  • String substring(int beginIndex, int endIndex):返回一個新字符串,它是此字符串從beginIndex開始截取到endIndex(不包含)的一個子字符串。

  • boolean endsWith(String suffix):測試此字符串是否以指定的后綴結(jié)束

  • boolean startsWith(String prefix):測試此字符串是否以指定的前綴開始

  • boolean startsWith(String prefix, int toffset):測試此字符串從指定索引開始的子字符串是否以指定前綴開始

  • boolean contains(CharSequence s):當(dāng)且僅當(dāng)此字符串包含指定的 char 值序列時,返回 true

  • int indexOf(String str):返回指定子字符串在此字符串中第一次出現(xiàn)處的索引

  • int indexOf(String str, int fromIndex):返回指定子字符串在此字符串中第一次出現(xiàn)處的索引,從指定的索引開始

  • int lastIndexOf(String str):返回指定子字符串在此字符串中最右邊出現(xiàn)處的索引

  • int lastIndexOf(String str, int fromIndex):返回指定子字符串在此字符串中最后一次出現(xiàn)處的索引,從指定的索引開始反向搜索。

    注:indexOf和lastIndexOf方法如果未找到都是返回-1

  • String replace(char oldChar, char newChar):返回一個新的字符串,它是通過用 newChar 替換此字符串中出現(xiàn)的所有 oldChar 得到的。

  • String replace(CharSequence target, CharSequence replacement):使用指定的字面值替換序列替換此字符串所有匹配字面值目標(biāo)序列的子字符串。

  • String replaceAll(String regex, String replacement):使 用 給 定 的replacement 替換此字符串所有匹配給定的正則表達式的子字符串。

  • String replaceFirst(String regex, String replacement):使用給定的replacement 替換此字符串匹配給定的正則表達式的第一個子字符串。

  • boolean matches(String regex):告知此字符串是否匹配給定的正則表達式。

  • String[] split(String regex):根據(jù)給定正則表達式的匹配拆分此字符串。

  • String[] split(String regex, int limit):根據(jù)匹配給定的正則表達式來拆分此字符串,最多不超過limit個,如果超過了,剩下的全部都放到最后一個元素中。

String與基本數(shù)據(jù)類型轉(zhuǎn)換

字符串-->基本數(shù)據(jù)類型、包裝類

  • Integer包裝類的public static int parseInt(String s):可以將由“數(shù)字”字符組成的字符串轉(zhuǎn)換為整型。
  • 類似地,使用java.lang包中的Byte、Short、Long、Float、Double類調(diào)相應(yīng)的類方法可以將由“數(shù)字”字符組成的字符串,轉(zhuǎn)化為相應(yīng)的基本數(shù)據(jù)類型。

基本數(shù)據(jù)類型、包裝類-->字符串

  • 調(diào)用String類的public String valueOf(int n)可將int型轉(zhuǎn)換為字符串
  • 相應(yīng)的valueOf(byte b)、valueOf(long l)、valueOf(float f)、valueOf(double d)、valueOf(boolean b)可由參數(shù)的相應(yīng)類型到字符串的轉(zhuǎn)換

String與字符數(shù)組轉(zhuǎn)換

字符數(shù)組-->字符串

  • String類的構(gòu)造器:String(char[])String(char[] ,int offset ,int length)分別用字符數(shù)組中的全部字符和部分字符創(chuàng)建字符串對象。

字符串-->字符數(shù)組

  • public char[] toCharArray():將字符串中的全部字符存放在一個字符數(shù)組中的方法。
  • public void getChars(int srcBegin, int srcEnd, char[] dst, int dstBegin):提供了將指定索引范圍內(nèi)的字符串存放到數(shù)組中的方法。

String與字節(jié)數(shù)組轉(zhuǎn)換

字節(jié)數(shù)組-->字符串

  • String(byte[]):通過使用平臺的默認(rèn)字符集解碼指定的 byte 數(shù)組,構(gòu)造一個新的 String。

  • String(byte[] ,int offset ,int length):用指定的字節(jié)數(shù)組的一部分,即從數(shù)組起始位置offset開始取length個字節(jié)構(gòu)造一個字符串對象。

字符串-->字節(jié)數(shù)組

  • public byte[] getBytes():使用平臺的默認(rèn)字符集將此 String 編碼為byte 序列,并將結(jié)果存儲到一個新的 byte 數(shù)組中。
  • public byte[] getBytes(String charsetName):使用指定的字符集將此 String 編碼到 byte 序列,并將結(jié)果存儲到新的 byte 數(shù)組。

編碼:字符串-->字節(jié)(看得懂-->看不懂的二進制數(shù)據(jù))

解碼:編碼的逆過程,字節(jié)-->字符串(看不懂的二進制數(shù)據(jù)-->看得懂)

說明:解碼時,要求解碼使用的字符集必須與編碼時使用的字符集一致,否則會出現(xiàn)亂碼。

StringBuffer、StringBuilder類

對比String、StringBuffer、StringBuilder

String:不可變字符序列,底層使用char[]存儲。

StringBuffer:可變字符序列、效率低、線程安全,底層使用char[]存儲

StringBuilder(JDK 5.0):可變字符序列、效率高、線程不安全,底層使用char[]存儲

注意:作為參數(shù)傳遞的話,方法內(nèi)部String不會改變其值,StringBuffer和StringBuilder會改變其值。

執(zhí)行效率:StringBuilder > StringBuffer > String

StringBuffer類的常用方法(StringBuilder與StringBuffer常用方法類似)

  • StringBuffer append(xxx):提供了很多的append()方法,用于進行字符串拼接

  • StringBuffer delete(int start,int end):刪除指定位置的內(nèi)容

  • StringBuffer replace(int start, int end, String str):把[start,end)位置替換為str

  • StringBuffer insert(int offset, xxx):在指定位置插入xxx

  • StringBuffer reverse() :把當(dāng)前字符序列逆轉(zhuǎn)

  • public int indexOf(String str)

  • public String substring(int start,int end)

  • public int length()

  • public char charAt(int n )

  • public void setCharAt(int n ,char ch)

日期時間API(JDK8之前)

基本關(guān)系

java.lang.System類

System類提供的public static long currentTimeMillis()用來返回當(dāng)前時間與1970年1月1日0時0分0秒之間以毫秒為單位的時間差。

  • 此方法適于計算時間差。

java.util.Date類

表示特定的瞬間,精確到毫秒

  • 構(gòu)造器:

    • Date():使用無參構(gòu)造器創(chuàng)建的對象可以獲取本地當(dāng)前時間。
    • Date(long date):使用有參構(gòu)造建創(chuàng)建指定毫秒數(shù)的Date對象。
  • 常用方法

    • getTime():返回自 1970 年 1 月 1 日 00:00:00 GMT 以來此 Date 對象表示的毫秒數(shù)。

    • toString():把此Date對象轉(zhuǎn)換為以下形式的String:dow mon dd hh:mm:ss zzz yyyy

      其中:dow 是一周中的某一天 (Sun, Mon, Tue, Wed, Thu, Fri, Sat),zzz是時間標(biāo)準(zhǔn)。

java.text.SimpleDateFormat類

作用:對日期Date類的格式化和解析

兩個操作:

  1. 格式化:日期-->字符串

    • SimpleDateFormat() :默認(rèn)的模式和語言環(huán)境創(chuàng)建對象
    • public SimpleDateFormat(String pattern) :該構(gòu)造方法可以用參數(shù)pattern指定的格式創(chuàng)建一個對象。
    • public String format(Date date) :格式化時間對象date
    SimpleDateFormat sdf = new SimpleDateFormat();
    Date date = new Date();
    System.out.println(date);
    System.out.println(sdf.format(date));
    

    輸出:

    Thu Apr 08 20:26:57 CST 2021
    21-4-8 下午8:26
    

    指定輸出格式:yyyy-MM-dd hh:mm:ss

    SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
    Date date = new Date();
    System.out.println(dateFormat.format(date));
    

    輸出:

    2021-04-08 08:36:42
    
  1. 解析:字符串-->日期

    要求字符串必須是符合SimpleDateFormat識別的格式(通過構(gòu)造器參數(shù)體現(xiàn)),否則拋異常

    默認(rèn)構(gòu)造器格式

    String str = "2021-4-8 上午11:40";
    SimpleDateFormat format = new SimpleDateFormat();
    try {
      System.out.println(format.parse(str));
    } catch (ParseException e) {
      e.printStackTrace();
    }
    

    指定格式的構(gòu)造器

    SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");
    try {
      System.out.println(dateFormat.parse("2021-04-08 08:35:49"));
    } catch (ParseException e) {
      e.printStackTrace();
    }
    

可以使用的格式:

java.util.Calendar(日歷)類

Calendar是一個抽象基類,主用用于完成日期字段之間相互操作的功能。

獲取Calendar實例的方法

  • 使用Calendar.getInstance()方法,返回一個子類GregorianCalendar的實例
  • 使用它的子類GregorianCalendar的構(gòu)造器

常用方法:

  1. public void set(int field,int value)

    Calendar calendar = Calendar.getInstance();
    calendar.get(Calendar.DAY_OF_YEAR)
    
  2. public int get(int field)

    Calendar calendar = Calendar.getInstance();
    calendar.set(Calendar.DAY_OF_YEAR,1);
    
  3. public void add(int field,int amount)

    Calendar calendar = Calendar.getInstance();
    calendar.add(Calendar.DAY_OF_YEAR, 10);
    
  4. public final Date getTime()

    Calendar calendar = Calendar.getInstance();
    calendar.getTime()
    
  5. public final void setTime(Date date)

    Calendar calendar = Calendar.getInstance();
    Date date = new Date();
    calendar.setTime(date)
    

注意:

  • 獲取月份時:一月是0,二月是1,以此類推,12月是11
  • 獲取星期時:周日是1,周二是2 ,....,周六是7

JDK8中新日期時間API

1.LocalDate 、LocalTime 、LocalDateTime

LocalDate、LocalTime、LocalDateTime 類是其中較重要的幾個類,它們的實例是不可變的對象,分別表示使用 ISO-8601日歷系統(tǒng)的日期時間、日期和時間。它們提供了簡單的本地日期或時間,并不包含當(dāng)前的時間信息,也不包含與時區(qū)相關(guān)的信息。

  • LocalDate代表IOS格式(yyyy-MM-dd)的日期,可以存儲 生日、紀(jì)念日等日期。
  • LocalTime表示一個時間,而不是日期。
  • LocalDateTime是用來表示日期和時間的,這是一個最常用的類之一。

注:ISO-8601日歷系統(tǒng)是國際標(biāo)準(zhǔn)化組織制定的現(xiàn)代公民的日期和時間的表示法,也就是公歷。

常用方法:

2. 瞬時:Instant

  • Instant:時間線上的一個瞬時點。 這可能被用來記錄應(yīng)用程序中的事件時間戳。
  • 在處理時間和日期的時候,我們通常會想到年,月,日,時,分,秒。然而,這只是時間的一個模型,是面向人類的。第二種通用模型是面向機器的,或者說是連續(xù)的。在此模型中,時間線中的一個點表示為一個很大的數(shù),這有利于計算機處理。在UNIX中,這個數(shù)從1970年開始,以秒為的單位;同樣的,在Java中,也是從1970年開始,但以毫秒為單位。
  • java.time包通過值類型Instant提供機器視圖,不提供處理人類意義上的時間單位。Instant表示時間線上的一點,而不需要任何上下文信息,例如,時區(qū)。
  • 概念上講,它只是簡單的表示自1970年1月1日0時0分0秒(UTC)開始的秒數(shù)。因為java.time包是基于納秒計算的,所以Instant的精度可以達到納秒級。
  • (1ns = 10-9s) 1秒 = 1000毫秒 =106 微秒=109納秒

常用方法:

3. java.time.format.DateTimeFormatter類

該類提供了三種格式化方法:

  • 預(yù)定義的標(biāo)準(zhǔn)格式。如:ISO_LOCAL_DATE_TIME;ISO_LOCAL_DATE;ISO_LOCAL_TIME
  • 本地化相關(guān)的格式。如:ofLocalizedDateTime(FormatStyle.LONG)
  • 自定義的格式。如:ofPattern(“yyyy-MM-dd hh:mm:ss”)

Java比較器

在Java中經(jīng)常會涉及到對象數(shù)組的排序問題,那么就涉及到對象之間的比較問題。

ava實現(xiàn)對象排序的方式有兩種:

  • 自然排序:java.lang.Comparable
  • 定制排序:java.util.Comparator

自然排序:Comparable接口

  • Comparable接口強行對實現(xiàn)它的每個類的對象進行整體排序。這種排序被稱為類的自然排序。
  • 實現(xiàn) Comparable的類必須實現(xiàn) compareTo(Object obj) 方法,兩個對象即通過 compareTo(Object obj) 方法的返回值來比較大小。
    • 如果當(dāng)前對象this大于形參對象obj,則返回正整數(shù);
    • 如果當(dāng)前對象this小于形參對象obj,則返回負(fù)整數(shù);
    • 如果當(dāng)前對象this等于形參對象obj,則返回零;
  • 實現(xiàn)Comparable接口的對象列表(和數(shù)組)可以通過 Collections.sortArrays.sort 進行自動排序。實現(xiàn)此接口的對象可以用作有序映射中的鍵或有序集合中的元素,無需指定比較器。
  • 對于類C的每一個e1e2來說,當(dāng)且僅當(dāng) e1.compareTo(e2) == 0 與e1.equals(e2) 具有相同的boolean值時,類C的自然排序才叫做與equals一致。建議(雖然不是必需的)最好使自然排序與equals一致。

例:

自定義的類,實現(xiàn)Comparable接口:

class Goods implements Comparable {
  private String name;
  private double price;
  //按照價格,比較商品的大小
  @Override
  public int compareTo(Object o) {
    if(o instanceof Goods) {
      Goods other = (Goods) o;
      if (this.price > other.price) {
        return 1;
      } else if (this.price < other.price) {
        return -1;
      }
      return 0;
    }
    throw new RuntimeException("輸入的數(shù)據(jù)類型不一致");
  }
  //構(gòu)造器、getter、setter、toString()方法略
}

對自定義的類進行排序,依據(jù)價格進行降序排列:

Goods[] all = new Goods[4];
all[0] = new Goods("《紅樓夢》", 100);
all[1] = new Goods("《西游記》", 80);
all[2] = new Goods("《三國演義》", 140);
all[3] = new Goods("《水滸傳》", 120);
Arrays.sort(all);
System.out.println(Arrays.toString(all));

定制排序:java.util.Comparator接口

  • 當(dāng)元素的類型沒有實現(xiàn)java.lang.Comparable 接口而又不方便修改代碼,或者實現(xiàn)了java.lang.Comparable 接口的排序規(guī)則不適合當(dāng)前的操作,那么可以考慮使用 Comparator 的對象來 排序,強行對多個對象進行整體排序的比較。
  • 重寫compare(Object o1,Object o2)方法,比較o1o2的大小: 如果方法返回正整數(shù),則表示o1大于o2;如果返回0表示相等;返回負(fù)整數(shù),表示o1小于o2
  • 可以將Comparator傳遞給sort方法(如Collections.sortArrays.sort),從而允許在排序順序上實現(xiàn)精確控制。
  • 還可以使用Comparator來控制某些數(shù)據(jù)結(jié)構(gòu)(如有序set或有序映射)的順序,或者為那些沒有自然順序的對象collection提供排序。

例:參考Comparable接口中的Goods類,取消對Comparable接口的實現(xiàn):

class Goods implements Comparable {
  private String name;
  private double price;
  //構(gòu)造器、getter、setter、toString()方法略
}

在調(diào)用Arrays.sort()方法時,傳入一個Comparator接口的匿名實現(xiàn)類,實現(xiàn)按價格的降序排序

Goods[] all = new Goods[4];

all[0] = new Goods("《紅樓夢》", 100);
all[1] = new Goods("《西游記》", 80);
all[2] = new Goods("《三國演義》", 140);
all[3] = new Goods("《水滸傳》", 120);

// 這里創(chuàng)建一個Comparator接口的匿名實現(xiàn)類,用來進行比較價格
Arrays.sort(all, new Comparator<Goods>() {
  @Override
  public int compare(Goods o1, Goods o2) {
    if (o1.getPrice() == o2.getPrice()) {
      return 0;
    } else if (o1.getPrice() < o2.getPrice()) {
      return 1;
    } else {
      return -1;
    }
  }
});

System.out.println(Arrays.toString(all));

Comparable接口與Comparator接口對比:

  • Comparable接口的方式一旦指定,保證Comparable接口實現(xiàn)類的對象在任何位置都可以比較大??;

  • Comparator接口屬于臨時性的比較;

System類

  • System類代表系統(tǒng),系統(tǒng)級的很多屬性和控制方法都放置在該類的內(nèi)部。該類位于java.lang包。

  • 由于該類的構(gòu)造器是private的,所以無法創(chuàng)建該類的對象,也就是無法實例化該類。其內(nèi)部的成員變量和成員方法都是static的,所以也可以很方便的進行調(diào)用。

  • 成員變量

    • System類內(nèi)部包含in、out和err三個成員變量,分別代表標(biāo)準(zhǔn)輸入流(鍵盤輸入),標(biāo)準(zhǔn)輸出流(顯示器)和標(biāo)準(zhǔn)錯誤輸出流(顯示器)。
  • 成員方法

    • native long currentTimeMillis():
      該方法的作用是返回當(dāng)前的計算機時間,時間的表達格式為當(dāng)前計算機時間和GMT時間(格林威治時間)1970年1月1號0時0分0秒所差的毫秒數(shù)。

    • void exit(int status):
      該方法的作用是退出程序。其中status的值為0代表正常退出,非零代表異常退出。 使用該方法可以在圖形界面編程中實現(xiàn)程序的退出功能等。

    • void gc():
      該方法的作用是請求系統(tǒng)進行垃圾回收。至于系統(tǒng)是否立刻回收,則取決于系統(tǒng)中垃圾回收算法的實現(xiàn)以及系統(tǒng)執(zhí)行時的情況。

    • String getProperty(String key):
      該方法的作用是獲得系統(tǒng)中屬性名為key的屬性對應(yīng)的值。系統(tǒng)中常見的屬性名以及屬性的作用如下表所示:

例:

String javaVersion = System.getProperty("java.version");
System.out.println("java的version:" + javaVersion);

String javaHome = System.getProperty("java.home");
System.out.println("java的home:" + javaHome);

String osName = System.getProperty("os.name");
System.out.println("os的name:" + osName);

String osVersion = System.getProperty("os.version");
System.out.println("os的version:" + osVersion);

String userName = System.getProperty("user.name");
System.out.println("user的name:" + userName);

String userHome = System.getProperty("user.home");
System.out.println("user的home:" + userHome);

String userDir = System.getProperty("user.dir");
System.out.println("user的dir:" + userDir);

Math類

java.lang.Math提供了一系列靜態(tài)方法用于科學(xué)計算。其方法的參數(shù)和返回值類型一般為double型。

  • abs:絕對值
  • acos,asin,atan,cos,sin,tan:三角函數(shù)
  • sqrt:平方根
  • pow(double a,doble b):a的b次冪
  • log:自然對數(shù)
  • exp:e為底的指數(shù)
  • max(double a,double b)/min(double a,double b):最大/最小值
  • random():返回0.0到1.0的隨機數(shù)
  • long round(double a):double型數(shù)據(jù)a轉(zhuǎn)換為long型(四舍五入)
  • toDegrees(double angrad):弧度—>角度
  • toRadians(double angdeg):角度—>弧度

BigInteger與BigDecimal

BigInteger類

  • Integer類作為int的包裝類,能存儲的最大整型值為231-1,Long類也是有限的,最大為263-1。如果要表示再大的整數(shù),不管是基本數(shù)據(jù)類型還是他們的包裝類都無能為力,更不用說進行運算了。
  • java.math包的BigInteger可以表示不可變的任意精度的整數(shù)。BigInteger 提供所有 Java 的基本整數(shù)操作符的對應(yīng)物,并提供 java.lang.Math 的所有相關(guān)方法。另外,BigInteger 還提供以下運算:模算術(shù)、GCD 計算、質(zhì)數(shù)測試、素數(shù)生成、位操作以及一些其他操作。
  • 構(gòu)造器
    BigInteger(String val):根據(jù)字符串構(gòu)建BigInteger對象

常用方法

  • public BigInteger abs():返回此 BigInteger 的絕對值的 BigInteger。
  • BigInteger add(BigInteger val):返回其值為 (this + val) 的 BigInteger
  • BigInteger subtract(BigInteger val):返回其值為 (this - val) 的 BigInteger
  • BigInteger multiply(BigInteger val):返回其值為 (this * val) 的 BigInteger
  • BigInteger divide(BigInteger val):返回其值為 (this / val) 的 BigInteger。整數(shù)相除只保留整數(shù)部分。
  • BigInteger remainder(BigInteger val):返回其值為 (this % val) 的 BigInteger。
  • BigInteger[] divideAndRemainder(BigInteger val):返回包含 (this / val) 后跟(this % val) 的兩個 BigInteger 的數(shù)組。
  • BigInteger pow(int exponent):返回其值為(thisexponent) 的BigInteger。

BigDecimal類

  • 一般的Float類和Double類可以用來做科學(xué)計算或工程計算,但在商業(yè)計算中,要求數(shù)字精度比較高,故用到java.math.BigDecimal類。

  • BigDecimal類支持不可變的、任意精度的有符號十進制定點數(shù)

  • 構(gòu)造器

    • public BigDecimal(double val)
    • public BigDecimal(String val)

常用方法

  • public BigDecimal add(BigDecimal augend)
  • public BigDecimal subtract(BigDecimal subtrahend)
  • public BigDecimal multiply(BigDecimal multiplicand)
  • public BigDecimal divide(BigDecimal divisor, int scale, int roundingMode)

例:

public void testBigInteger() {
  BigInteger bi = new BigInteger("12433241123");
  BigDecimal bd = new BigDecimal("12435.351");
  BigDecimal bd2 = new BigDecimal("11");
  System.out.println(bi);
  // System.out.println(bd.divide(bd2));
  System.out.println(bd.divide(bd2, BigDecimal.ROUND_HALF_UP));
  System.out.println(bd.divide(bd2, 15, BigDecimal.ROUND_HALF_UP));
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容