在 Java 中將字符串數組轉換為 int 數組
一、概述
在本快速教程中,讓我們探討如何在 Java 中將String
數組轉換為int
數組。
二、問題介紹
首先,讓我們看一個String
數組示例:
String[] stringArray = new String[] { "1", "2", "3", "4", "5", "6", "42" };
我們創建了包含七個字符串的stringArray
。現在,我們需要將stringArray
轉換為整數數組:
int[] expected = new int[] { 1, 2, 3, 4, 5, 6, 42 };
如上面的示例所示,需求非常簡單。然而,在現實世界中,字符串數組可能來自不同的來源,例如用戶輸入或另一個系統。因此,輸入數組可能包含一些不是有效數字格式的值,例如:
String[] stringArrayWithInvalidNum = new String[] { "1", "2", "hello", "4", "world", "6", "42" };
“hello”
和“world”
元素不是有效數字,但其他元素是。通常,當在實際項目中檢測到這些類型的值時,我們會遵循特殊的錯誤處理規則——例如,中止數組轉換、將特定整數作為回退等。
在本教程中,我們將使用 Java 的最小整數作為無效字符串元素的回退:
int[] expectedWithInvalidInput = new int[] { 1, 2, Integer.MIN_VALUE, 4, Integer.MIN_VALUE, 6, 42 };
接下來,讓我們從包含所有有效元素的字符串數組開始,然後使用錯誤處理邏輯擴展解決方案。
為簡單起見,我們將使用單元測試斷言來驗證我們的解決方案是否按預期工作。
3.使用流API
讓我們首先使用 Stream API 轉換包含所有有效元素的字符串數組:
int[] result = Arrays.stream(stringArray).mapToInt(Integer::parseInt).toArray();
assertArrayEquals(expected, result);
如我們所見, Arrays.stream()
方法將輸入字符串數組轉換為Stream
。然後, mapToInt()
中間操作將我們的流轉換為IntStream
對象。
我們使用Integer.parseInt()
將字符串轉換為整數。最後, toArray()
將IntStream
對象轉換回數組。
那麼,接下來,讓我們看看無效數字格式場景中的元素。
假設輸入字符串的格式不是有效數字,在這種情況下Integer.parseInt()
方法會拋出**NumberFormatException** .
因此,我們需要將mapToInt()
方法中的方法引用Integer::parseInt
替換為lambda表達式,並處理lambda表達式中的NumberFormatException
異常:
int[] result = Arrays.stream(stringArrayWithInvalidNum).mapToInt(s -> {
try {
return Integer.parseInt(s);
} catch (NumberFormatException ex) {
// logging ...
return Integer.MIN_VALUE;
}
}).toArray();
assertArrayEquals(expectedWithInvalidInput, result);
然後,如果我們運行測試,它就會通過。
如上面的代碼所示,我們只更改了mapToInt()
方法中的實現。
值得一提的是, Java Stream API 在 Java 8 及更高版本上可用。
4. 在循環中實現轉換
我們已經了解了 Stream API 如何解決這個問題。但是,如果我們使用的是較舊的 Java 版本,則需要以不同的方式解決問題。
現在我們了解Integer.parseInt()
完成主要的轉換工作,我們可以遍歷數組中的元素並在每個字符串元素上調用Integer.parseInt()
方法:
int[] result = new int[stringArray.length];
for (int i = 0; i < stringArray.length; i++) {
result[i] = Integer.parseInt(stringArray[i]);
}
assertArrayEquals(expected, result);
正如我們在上面的實現中看到的,我們首先創建一個與輸入字符串數組長度相同的整數數組。然後,我們執行轉換並在for
循環中填充結果數組。
接下來,讓我們擴展實現以添加錯誤處理邏輯。與 Stream API 方法類似,只需將轉換行包裹在try-catch
塊中即可解決問題:
int[] result = new int[stringArrayWithInvalidNum.length];
for (int i = 0; i < stringArrayWithInvalidNum.length; i++) {
try {
result[i] = Integer.parseInt(stringArrayWithInvalidNum[i]);
} catch (NumberFormatException exception) {
// logging ...
result[i] = Integer.MIN_VALUE;
}
}
assertArrayEquals(expectedWithInvalidInput, result);
如果我們試一試,測試就會通過。
5.結論
在本文中,我們通過示例學習了兩種將字符串數組轉換為整數數組的方法。此外,我們還討論了在字符串數組包含無效數字格式時處理轉換。
如果我們的 Java 版本是 8 或更高版本,Stream API 將是最直接的解決問題的方法。否則,我們可以遍歷字符串數組並將每個字符串元素轉換為整數。
與往常一樣,本文中提供的所有代碼片段都可以在 GitHub 上找到。