---
# System prepended metadata

title: Java自學紀錄 - 公用類別庫
tags: [公用類別庫, Java]

---

###### tags: `Java` `公用類別庫`
# Java自學紀錄 - 公用類別庫
# 數值處理
**Math**類別為Java中處理數值運算最主要的類別。
我個人覺得最常用的方法是

* abs - 絕對值
* pow - 次方
* sqrt - 開平方根
* cbrt - 開立方根
* max - 回傳最大數
* min - 回傳最小數
* random - 亂數
* round - 四捨五入

# 字串處理
## String 型別(建構子)
* String()
```java=
String str = new String(); //宣告 str
str = "lucas";
```
* String(String str)
```java=
String str = new String("lucas");
```
* String(char[] value)

    可以陣列中的元素轉為字串
```java=
char a[] = {'l','u','c','a','s'};
String str = new String(a); // str = "lucas"
```
### 常用字串運算子
```java=
String a = "lucas";
String b = "is";
String c = "handsome";
//字串長度
System.out.println(a.length()); //5
//字串相加
System.out.println(a+b+c); //lucasishandsome
//判斷字串是否相同,回傳true,false
System.out.println(a==b); //回傳false
```
### 常用字串方法
```java=
String a = "lucas";
String b = "is";
String c = "handsome";
String d = "aabbcc";
String e = "AAAAA";
String f = "bbbbb";
//查看第幾n個字元,要注意的是字串索引值是從0開始
System.out.println(a.charAt(3)); //a
//給一個索引值,找出第一個出現的位置
System.out.println(c.indexOf('d')); //3
//將就字元置換成新字元
System.out.println(d.replace('b','d')); //aaddcc
//取一長度內的字串,從str[a]~str[b-1]
System.out.println(c.substring(2,6)); //ndso
//字串轉小寫
System.out.println(e.toLowerCase()); //aaaaa
//字串轉大寫
System.out.println(f.toUpperCase()); //BBBBB
```
## StringBuffer類別
前面的String僅有回傳執行方法後的結果,並不會更改其內容。
若要更改其內容,可以用StringBuffer。
>StringBuffer 宣告方式

```java=
StringBuffer str = new StringBuffer();
```
* StringBuffer()
此建構子無須回傳參數,其預設值為16

好用方法(使用方法跟String大致相同)
* append 新增字串到最後面
* delete 刪除n~m的字串
* insert 在n位置插入字串
* reverse 反轉字串

## StringTokenizer
他可以協助我們把一個句子分成不同小片段,例如:Lucas is handsome
可以分解成3個字,分別是Lucas,is,handsome。
* int str.countTokens() 可算出有幾個可分解的字
* String str.nextTokens() 回傳下一個待分解的字
* boolean str.hasMoreTokens() 是否還有待分解的字
```java=
import java.util.StringTokenizer; //要記的先載套件

public class Java_10_2d {
    public static void main(String[] args) {
        String str = "Lucas is handsome";
        StringTokenizer newstr = new StringTokenizer(str);
        while(newstr.hasMoreTokens()){
            System.out.println(newstr.nextToken());
        }
    }
}
```
>執行結果

![](https://i.imgur.com/yH8FQhI.png)
## String的型別轉換
* 將其他型別轉換成String
```java=
int a = 10;
String str = Integer.toString(a); //10從int變成String
```
* 將String轉換成其他型別
```java=
String str = "123456";
int b;
b = Integer.parseInt(str); //123456從字串變成int
b++; //會等於123457
```
----
# 陣列處理
事先要載入套件
```java=
import java.util.Arrays
```
## 填滿 Arrays.fill()
```java=
int a[] = new int[5];
Arrays.fill(a,3)//將a陣列填滿3-->3,3,3,3,3
Arrays.fill(a,1,3,4)//將a[1]~a[3-1]填滿4-->3,4,4,3,3
```
## 判斷是否相等 Arrays.equals()
```java=
int b[] = new b[3];
int c[] = new b[3];
boolean ans;
ans = Arrays.equal(b,c); //true
```
## 排序 Arrays.sort()
```java=
int d[] = {5,6,2,1,4};
Arrays.sort(d);//小到大排列-->1,2,4,5,6

int e[] = {5,6,2,1,4};
Arrays.sort(a,1,4);//a[1]~a[4-1]sort-->5,1,2,6,4
```
## 搜尋 Arrays.binarySearch()
在binarySearch之前要先sort
```java=
int f[] = {1,2,3,4,5}; //必須由小排到大的陣列
System.out.println(Arrays.binarySearch(f,3));//傳回位置-->2
```

# 時間處理
記得先載入套件
* get()
```java=
import java.util.Calendar;

public class Java_10_4_calender {
    public static void main(String[] args) {
        Calendar c = Calendar.getInstance(); //取得物件實體
        System.out.println(c.getTime()); //Thu Sep 10 00:13:39 CST 2020
    }
}
```
除此之外還有很多類別常數(static)可以被get()取得。
例如 : YEAR,MONTH,DATE,AM,PM。
* set()

```java=
//多載
import java.util.Calendar;
public class Java_10_5 {
    public static void main(String[] args) {
        Calendar c = Calendar.getInstance();
        System.out.println(c.getTime());
        c.set(2019,5,20);
        System.out.println(c.getTime());
    }
}
```
>輸出結果
```
Wed Sep 16 13:34:26 CST 2020
Thu Jun 20 13:34:26 CST 2019
```

# 資料結構
## stack類別
* push()
* empty()
* pop()
* peek()
* search()

```java=
import java.util.Stack;

public class Java_stack {
    public static void main(String[] args) {
        //stack宣告
        Stack s =  new Stack();
        Stack ept = new Stack();
        //push(),把元素推去stack的最後
        s.push("hi");
        s.push("lucas");
        s.push(3.14159);
        //empty() 判斷Stack是否為空的
        s.empty(); //false
        ept.empty(); //true
        //peek 可查看Stack最頂端的元素是甚麼
        System.out.println(s.peek()); //3.15159
        //pop() 去除Stack最頂端的元素
        s.pop();
        System.out.println(s); //[hi, lucas]
        //search() 找尋元素位置
        //他是從頂端往下算的,最後一個元素為1
        s.search("hi");
        System.out.println(s.search("hi")); //2
        //add() 新增元素
        s.add("last");
        System.out.println(s); //[hi, lucas, last]
    }
}
```
