Java中int和char之間的轉換
一、概述
在本教程中,我們將了解如何在 Java 中將int轉換為char並返回。
2. Java 中的char
我們將簡要討論字符的表示方式,以便更好地理解我們將在本文後面看到的代碼。
在內部, Java 將每個char存儲為 16 位 Unicode 編碼值:
| 特點 | 2字節 | 十進制(以 10 為底) | 十六進制(基數 16) |
|---|---|---|---|
| 一個 | 00000000 01000001 | 65 | 41 |
| 一個 | 00000000 01100001 | 61 | 97 |
| 1個 | 00000000 00110001 | 49 | 31 |
| Z | 00000000 01011010 | 90後 | 5A |
我們可以通過將char值轉換為int來輕鬆地檢查這一點:
assertEquals(65, (int)'A');
ASCII 碼是 Unicode 編碼的一個子集,主要代表英文字母表。
3. int轉char
假設我們有一個值為 7 的int變量,我們想將其轉換為對應的char類型“ 7 ”。我們有幾個選項可以做到這一點。
簡單地將它轉換為char是行不通的,因為這會將它轉換為二進製表示的字符0111 ,在 UTF-16 中是U+0007或字符'BELL' 。
3.1.抵消“0”
UTF-16 中的字符按順序表示。所以我們可以將“ 0 ”字符偏移7以獲得“ 7 ”字符:
@Test
public void givenAnInt_whenAdding0_thenExpectedCharType() {
int num = 7;
char c = (char)('0' + num);
assertEquals('7', c);
}
3.2.使用Character.forDigit()方法
添加“ 0 ”有效,但似乎有點老套。幸運的是,我們有一種更簡潔的方法來使用[Character.forDigit()](https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/Character.html#forDigit(int,int))方法:
@Test
public void givenAnInt_whenUsingForDigit_thenExpectedCharType() {
int num = 7;
char c = Character.forDigit(num , 10);
assertEquals('7', c);
}
我們可以注意到forDigit ()方法接受第二個參數radix,它表示我們要轉換的數字的基本表示形式。在我們的例子中,它是10 。
3.3.使用Integer.toString()方法
我們可以使用包裝器類Integer,它具有toString()方法,可將給定的int轉換為其String表示形式。當然,這可以用於將多位數字轉換為String. B但是,我們也可以通過鏈接String. B charAt()方法並選擇第一個char char
@Test
public void givenAnInt_whenUsingToString_thenExpectedCharType() {
int num = 7;
char c = Integer.toString(num).charAt(0);
assertEquals('7', c);
}
4. 將char轉換為int
之前,我們看到瞭如何將int轉換為char 。讓我們看看如何獲取char的int值。正如我們可能預料的那樣,將char轉換為int是行不通的,因為這為我們提供了字符的 UTF-16 編碼的十進製表示:
@Test
public void givenAChar_whenCastingFromCharToInt_thenExpectedUnicodeRepresentation() {
char c = '7';
assertEquals(55, (int) c);
}
4.1.減去'0'
如果當我們添加 '0' 時我們得到char,然後相反地通過減去 '0' 十進制值,我們應該得到int :
@Test
public void givenAChar_whenSubtracting0_thenExpectedNumericType() {
char c = '7';
int n = c - '0';
assertEquals(7, n);
}
這確實有效,但有更好、更簡單的方法來做到這一點。
4.2.使用Character.getNumericValue()方法
Character類再次提供了另一個輔助方法getNumericValue() ,它基本上按照它說的做:
@Test
public void givenAChar_whenUsingGetNumericValue_thenExpectedNumericType() {
char c = '7';
int n = Character.getNumericValue(c);
assertEquals(7, n);
}
4.3.使用Integer.parseInt()
我們可以使用[Integer.parseInt()](https://docs.oracle.com/en/java/javase/11/docs/api/java.base/java/lang/Integer.html#parseInt(java.lang.String))將String轉換為數字表示形式。和以前一樣,雖然我們可以使用它來將具有多個數字的整個數字轉換為int表示形式,但我們也可以將它用於單個數字:
@Test
public void givenAChar_whenUsingParseInt_thenExpectedNumericType() {
char c = '7';
int n = Integer.parseInt(String.valueOf(c));
assertEquals(7, n);
}
確實,語法有點繁瑣,主要是因為它涉及到多次轉換,但它按預期工作。
5.結論
在本文中,我們了解了字符在 Java 中是如何在內部表示的,以及我們如何將int轉換為char並返回。
與往常一樣,可以在 GitHub 上找到本文的完整代碼示例。