在 Java 中將數字轉換為字母
一、概述
通常,當我們談論將int
數字轉換為char
時,
我們會根據目標char
的 ASCII 碼執行轉換。
但是,在本教程中,我們將研究將int
值轉換為字母字符的不同場景。
二、問題介紹
我們知道英文字母表中有 26 個字母:A、B、C、……、X、Y、Z。
現在,假設我們收到一個整數。我們的任務是按照以下規則將整數轉換為英文字母:
- 整數 -> 字母:
-
0
->A
-
1
->B
-
2
->C
- ……
-
10
->K
- ……
-
23
->X
-
24
->Y
-
25
->Z
當然,我們收到的整數可能不在[0, 25]
範圍內。如果是這種情況,我們有幾個選項,具體取決於我們的要求:
- 拋出異常
- 返回
null
值 - 返回一個特定的字符作為後備,例如,“
?
“ 或者 ”-”
在本教程中,我們將採用上面的最後一種方法,返回“ ?
” 字符,如果輸入整數超出範圍[0, 25]
。
那麼接下來,讓我們構建方法來解決這個有趣的問題。為簡單起見,我們將使用單元測試斷言來驗證我們的解決方案是否按預期工作。
3. 從序列中挑選字母
如果我們考慮轉換規則,我們可能會發現整數和關聯字母之間的關係。如果我們將字母 A – Z 放入列表或數組中,輸入整數就是索引。當然,我們仍然需要處理“超出範圍”的情況。
但是,使用List
可能會帶來額外的開銷。為簡單起見,我們將創建一個包含“ ABC…Z
”的String
常量,並使用標準的subString()
方法從字符串中選取目標字母:
static char numToLetterBySubstr(int i) {
String LETTERS = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
if (i > 0 && i <= 25) {
return LETTERS.substring(i, i + 1).charAt(0);
} else {
return '?';
}
}
正如我們在上面的實現中看到的,我們首先檢查輸入整數的範圍。我們返回' ?
' 字符,如果輸入超出目標範圍。否則,我們通過調用substring()
方法來選擇正確的字母。
值得一提的是**substring()
方法的第二個參數是endIndex
。此外, endIndex
引用的值被排除在結果之外**。因此, substring(i, i+1)
返回索引為i
字母。
接下來,讓我們編寫一個測試來驗證此方法是否正常工作:
char negativeInputResult = numToLetterBySubstr(-7);
assertEquals('?', negativeInputResult);
char tooLargeInputResult = numToLetterBySubstr(42);
assertEquals('?', tooLargeInputResult);
char result = numToLetterBySubstr(10);
assertEquals('K', result);
我們已經涵蓋了涉及 0 到 25 範圍內和之外的輸入值的兩種情況。
如果我們執行它,測試就會通過。
4. 'A' + Offset
方法
我們已經看到了使用預定義字母序列並通過索引選擇目標字母的直接解決方案。或者,我們可以保存預定義的字母序列並利用字母的char
值來解決問題。
換句話說,我們以字母“ A
”為基礎。因此,如果輸入的整數在 0 到 25 的範圍內,我們可以將其視為“ A
”字符的偏移量.
因此, 'A' + input
將是我們正在尋找的字母。
但是'A' + int
會產生一個int
。因此,我們需要將其轉換為char.
當然,我們不應該忘記處理“輸入超出範圍”的情況:
static char numToLetterByAsciiCode(int i) {
if (i > 0 && i <= 25) {
return (char) ('A' + i);
} else {
return '?';
}
}
接下來,讓我們測試它是否按預期工作:
char negativeInputResult = numToLetterByAsciiCode(-7);
assertEquals('?', negativeInputResult);
char tooLargeInputResult = numToLetterByAsciiCode(42);
assertEquals('?', tooLargeInputResult);
char charResult = numToLetterByAsciiCode(10);
assertEquals('K', charResult);
如果我們運行測試,它就會通過。所以,這個方法解決了這個問題。
值得一提的是,該方法的返回類型是char
而不是String
。如果需要String
類型,我們可以使用String.valueOf()
方法簡單地將char
轉換為String
以獲取String
中的字母:
assertEquals("K", String.valueOf(charResult));
5.結論
在本文中,我們解決了一個有趣的問題:將整數轉換為英文字母。
我們已經實現了兩種方法來解決它:
- 從預定義的字母序列中挑選字母
- 以字符'
A
'為底,'A' + offset
得到結果
與往常一樣,此處提供的所有代碼片段都可以在 GitHub 上找到。