# [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)