在 Java 中將 String 轉換為 long 或 Long
1. 概述
在本教程中,我們將探討如何將String轉換為long基元或Long物件。
假設我們有一個String ,其值反映的數字正好超出有符號int的範圍。我們選擇Integer.MAX_VALUE + 1 ,即 2,147,483,648。
2. 使用Long的建構函數
給定我們的String ,我們可以使用重載的Long建構函數,該構造函數將String作為參數:
Long l = new Long("2147483648");
這將創建一個新的Long實例,可以透過呼叫longValue()方法將其轉換為原始long實例。
或者,我們可以利用拆箱功能,在一個語句中將Long物件轉換為其基本等價物:
long l = new Long("2147483648");
然而,從 Java 9 開始,不建議使用此建構函數,而是使用Long類別的靜態工廠方法valueOf()或parseLong() 。
3.使用Long.valueOf()方法
當我們想要從String中取得Long物件時,建議使用靜態工廠方法valueOf():
Long l = Long.valueOf("2147483648");
此方法是首選方法,因為它會快取常用的Long實例以提供更好的效能和記憶體開銷。這與建構函式相反,建構函式每次呼叫時都會建立一個新實例。
4.使用Long.parseLong()方法
當我們想要回傳一個long原語時,我們可以使用parseLong()靜態工廠方法:
long l = Long.parseLong("2147483648");
當我們想要得到一個long原語時,這種方法比建構子和valueOf()更受歡迎。這是因為它直接傳回一個long原語,而不會在轉換過程中建立不必要的Long物件。
5.使用Long.decode()方法
如果我們的String是十六進位形式,我們可以使用靜態工廠方法decode()將其轉換為Long物件。
因此,假設我們的String有一個十六進位表示法:
Long l = Long.decode("0x80000000");
值得注意的是,該方法還支援十進制和八進位表示法。因此,在使用此方法時,我們必須警惕String中的前導零。
6. 使用 Apache Commons 的NumberUtils.createLong()方法
要使用Apache Commons Lang 3 ,我們將以下相依性加入pom.xml中:
<dependency>
<groupId>org.apache.commons</groupId>
<artifactId>commons-lang3</artifactId>
<version>3.14.0</version>
</dependency>
靜態工廠方法createLong()將String轉換為Long物件:
Long l = NumberUtils.createLong("0x80000000");
它在底層使用了Long.decode() ,並添加了一個重要的內容 - 如果String參數為null ,則它會傳回null 。
7.使用Long.parseUnsignedLong()方法
現在,假設我們有一個String ,它表示超出long原語有符號範圍的值。我們可以使用parseUnsignedLong()靜態工廠方法來取得 0 到 18,446,744,073,709,551,615 範圍內的 unsigned long :
long l = Long.parseUnsignedLong("9223372036854775808");
與我們在本文中探討的其他選項相反,如果String中的第一個字元是 ASCII 負號,則會引發NumberFormatException 。
8.使用Google Guava的Longs.tryParse()方法
要使用Google Guava ,我們將以下依賴項新增到pom.xml中:
<dependency>
<groupId>com.google.guava</groupId>
<artifactId>guava</artifactId>
<version>33.0.0-jre</version>
</dependency>
現在,給定我們的String我們可以使用tryParse()將其轉換為Long物件:
Long l = Longs.tryParse("2147483648");
到目前為止所探索的所有選項在出現不可解析的String時都會拋出NumberFormatException 。因此,如果我們想避免拋出此異常的可能性,我們可以使用傳回null靜態工廠方法tryParse()來代替:
@Test
void givenInvalidString_whenUsingGuavaLongs_thenObtainNull() {
assertThat(Longs.tryParse("Invalid String")).isNull();
}
9. 結論
在本文中,我們了解到parseLong()是取得給定字串的long原語的首選方法String.我們也看到valueOf()是取得給定String的Long物件的首選方法。
與往常一樣,本文中使用的程式碼範例可以在 GitHub 上找到。