# [Java] 文字及數字常用的一些方法
###### tags: `Java`
[TOC]
## :triangular_flag_on_post: 型態間的轉換
需要先換位階高的型態再運算
- **⾃動轉型** 又稱隱含轉型(implicit casting),通常發⽣在值域⼩者轉成⼤者|
```java
//int定義字元可以直接輸出編碼
int i = '李'; //結果26446
int n = ox64; //印出100(10進制)
```
- `short`、`byte`、`char` =>`int`
- **浮點數**[ `double` (8 bytes) > `float` (4 bytes)] \> **整數**[ `long` (8 bytes) > `int`(4 bytes) > `short` (2 bytes) > `char` (1 bytes)]
- **強迫轉型** 或稱明確轉型(explicit casting),通常發⽣在值域⼤者轉成⼩者
```java
//datatype n=(要轉換的datatype)(運算式、整數或常數);
short i=(short)(i+123);
```
### 數字及文字轉換的各種方法
- 數字轉⽂字
- String.valueOf()
```java
String intStr = String.valueOf(20);
```
- ⽂字轉數字,必須純數字格式,否則產⽣NumberFormatException
```java
//"x123"不是純數字格式,會產⽣NumberFormatException
Integer.parseInt("x123");
```
- ⽂字轉整數
- Integer.parseInt()
- Integer.valueOf()
```java
Integer.parseInt("20");
```
- ⽂字轉浮點數
- Integer.parseInt()
- Integer.valueOf()
```java
Double.parseDouble("20.123");
```
- 長整數轉整數
- Math.toIntExact()
```=java
Long longId = 100L;
Integer integerId = Math.toIntExact(longId);
```
- 整數轉長整數
- Long.valueOf()
```=java
Integer integerId = 100;
Long longId = Long.valueOf(integerId);
```
:::warning
Math.toIntExact 會檢查範圍,如果 longId 超過 Integer 的範圍(-2,147,483,648 到 2,147,483,647),它會拋出 ArithmeticException。
:::
## :triangular_flag_on_post: 文字轉換指示
將值化為使用者能辨識的格式
格式化結果為字串
- 格式化
```java
printf("轉換指示 轉換指示",值,值)
printf("%d %o %x",n,n,n) //輸出10進制的100, 8進制的04416
```
| datatype | 轉換指示(佔位用的) |
| -------- | -------- |
| int | `%d`(10進制) `%o`(8進制,輸出結果前面會加0) `%`(16進制,輸出結果前面會加0x) |
| double | `%f` `%e` |
- 修飾字(flag)
```java
%_d
↑//可加入#,空白,數字,-(通常用在英文)..等
```
- `%`:格式字串的啟始字元
- `d`:整數類型
- `f`:浮點數類型
- `s`, `S`:字串類型
- `$`:指定要格式化的來源參數
- `<`:共⽤前⾯已指定的來源參數
- `,`:加上分位符號
- `.`:⼩數點
- `n`:換⾏
## :triangular_flag_on_post: 擷取 List 部分內容
取第 fromIndex 到第 toIndex 的內容
List subList(int fromIndex, int toIndex)
```=java!
List<Integer> list = new LinkedList<>();
list.add(10);
list.add(30);
list.add(50);
list.add(70);
list.add(30);
System.out.println( list );
// [10, 30, 50, 70, 30]
System.out.println( list.subList(1, 3) );
// [30, 50]
```
## :triangular_flag_on_post: 判斷空值
* 數字(Long、Integer)
```
Long id = xxx.getId();
Objects.nonNull(id)
Objects.isNull(id)
```
* 字串(String)
1. 不過濾空白字元 ` `、換行 `\n`、tab `\t`,常用於前端驗證
```=java!
StringUtils.isBlank()
StringUtils.isNoneBlank() // 可用於數組字串
StringUtils.isAnyBlank() // 與isNoneBlank相反
StringUtils.isNoneBlank(num1, num2, num3) //若任一組字串false,則全為false
StringUtils.isAnyBlank(num1, num2, num3)
```
2. 會過濾空白字元、換行、tab...等,常用於後端驗證
```
StringUtils.isEmpty()
```
* 集合(List、Map)
```
List list = new ArrayList();
Map<String, String> map = new HashMap<String, String>();
CollectionUtils.isEmpty(list)
CollectionUtils.isEmpty(map)
```
* 物件
```
User user = userService.getId(123);
if(user != null){ }
```
```
User user = userService.getId(123);
Objects.nonNull(user)
```
---
參考資料:
[java判断各种类型是否为空代码](https://blog.csdn.net/qq_34486648/article/details/122470004)