Java 中將 Char 數組轉換為 Int 數組
1. 概述
在這個簡短的教學中,我們將探索在 Java 中將char
數組轉換為int
數組的不同方法。
首先,我們將使用 Java 7 中的方法和類別。然後,我們將了解如何使用 Java 8 Stream API 實現相同的目標。
2. 使用Character
類
Character
類別將char
值包裝在物件中。它提供了各種方法來將原始字元作為物件進行工作和操作。
在這些方便的方法中,我們找到了getNumericValue()
和digit()
。那麼,讓我們深入了解如何使用它們將char
數組轉換為int
數組。
2.1. Character#getNumericValue()
此方法提供了一種直接而簡潔的方法來傳回給定字元的int
值。例如,字元'6'
將傳回 6。
那麼,讓我們看看實際情況:
int[] usingGetNumericValueMethod(char[] chars) {
if (chars == null) {
return null;
}
int[] ints = new int[chars.length];
for (int i = 0; i < chars.length; i++) {
ints[i] = Character.getNumericValue(chars[i]);
}
return ints;
}
正如我們所看到的,我們迭代了char
數組。然後,我們呼叫getNumericValue()
來取得每個字元的整數值。
一個重要的警告是,如果指定的字元沒有任何int
值,則傳回 -1 。
請記住,我們可以以更實用的方式重寫傳統循環:
Arrays.setAll(ints, i -> Character.getNumericValue(chars[i]));
現在,讓我們新增一個測試案例:
@Test
void givenCharArray_whenUsingGetNumericValueMethod_shouldGetIntArray() {
int[] expected = { 2, 3, 4, 5 };
char[] chars = { '2', '3', '4', '5' };
int[] result = CharArrayToIntArrayUtils.usingGetNumericValueMethod(chars);
assertArrayEquals(expected, result);
}
2.2. Character#digit()
通常, digit(char ch, int radix)
是我們可以用來解決核心問題的另一種方法。此方法根據指定的基數傳回給定字元的數值。
現在,我們舉例說明如何使用digit()
將字元陣列轉換為整數陣列:
int[] usingDigitMethod(char[] chars) {
int[] ints = new int[chars.length];
for (int i = 0; i < chars.length; i++) {
ints[i] = Character.digit(chars[i], 10);
}
return ints;
}
簡而言之,最常見的基數是 10,它表示十進制 (0-9)。例如,以 10 為基數的字元 '7' 就等於 7 。
最後,我們將建立另一個測試案例來確認我們的方法:
@Test
void givenCharArray_whenUsingDigitMethod_shouldGetIntArray() {
int[] expected = { 1, 2, 3, 6 };
char[] chars = { '1', '2', '3', '6' };
int[] result = CharArrayToIntArrayUtils.usingDigitMethod(chars);
assertArrayEquals(expected, result);
}
3. 使用串流API
或者,我們可以使用流 API 來處理char
數組到int
數組的轉換。那麼,讓我們在實踐中來看看:
int[] usingStreamApiMethod(char[] chars) {
return new String(chars).chars()
.map(c -> c - 48)
.toArray();
}
如上所示,我們從char
數組建立了一個String
物件。然後,我們使用chars()
和map()
方法將每個字元轉換為int
值。
請注意,字元「0」在 ASCII 中是 48,「1」是 49,依此類推。因此,'0' – 48 等於 0,依此類推。這就是為什麼減去 48 會將字元 '0'..'9' 轉換為值 0..9 。
接下來,讓我們再增加一個測試案例:
@Test
void givenCharArray_whenUsingStreamApi_shouldGetIntArray() {
int[] expected = { 9, 8, 7, 6 };
char[] chars = { '9', '8', '7', '6' };
int[] result = CharArrayToIntArrayUtils.usingStreamApiMethod(chars);
assertArrayEquals(expected, result);
}
4. 使用Integer#parseInt()
parseInt()
是將char
轉換為int
時需要考慮的另一個不錯的選擇。這個方法讓我們得到給定字串的原始int
值:
int[] usingParseIntMethod(char[] chars) {
int[] ints = new int[chars.length];
for (int i = 0; i < chars.length; i++) {
ints[i] = Integer.parseInt(String.valueOf(chars[i]));
}
return ints;
}
這裡,我們需要先將每個字元轉換為字串,然後再傳回 int 值。
像往常一樣,我們將建立一個測試案例來對我們的方法進行單元測試:
@Test
void givenCharArray_whenUsingParseIntMethod_shouldGetIntArray() {
int[] expected = { 9, 8, 7, 6 };
char[] chars = { '9', '8', '7', '6' };
int[] result = CharArrayToIntArrayUtils.usingParseIntMethod(chars);
assertArrayEquals(expected, result);
}
5. 結論
在這篇短文中,我們詳細解釋如何在 Java 中將char
數組轉換為int
數組。
與往常一樣,本文中使用的完整程式碼可以在 GitHub 上找到。