爲了您的特殊目的,使用Java 8 Streams,您甚至不需要循環。
String[] letters = IntStream.rangeClosed('a', 'z').mapToObj(i -> Character.toString((char)i)).toArray(String[]::new);
System.out.println(Arrays.toString(letters));
進行分解:
IntStream.rangeClosed(int, int)
使得從第一int
的Stream
int
s到第二,包括兩個端點的。我們使用這個,因爲沒有CharStream類(出於某種原因),但我們仍然可以使用char
s 'a'
和'z'
,它們將被隱式轉換爲它們的int
值。
mapToObj
需要將Stream
的每個int
轉換爲對象的功能。它在這裏變得有點混亂,因爲沒有從int
到String
的單步轉換,我們首先需要將int
解釋爲字符值。因此,我們將每個int
(命名爲i
)投射到char
,然後將其換算爲從char
到String
:i -> Character.toString((char)i)
的轉換。這會給我們留下一個Stream<String>
。
- 現在,我們希望輸出爲
String[]
,根據您的問題。 Stream
有一個toArray
方法,但這會給我們一個惱人的Object[]
結果。相反,我們將提供我們想用來構建數組的方法。我們不想要任何花哨的東西,所以我們只需使用標準初始值設定項即可得到String
數組:toArray(String[]::new)
。
在此之後,letters
將等於的String
秒的陣列,並且每一個將依次是字母從a
到z
。
如果您沒有訪問Java 8或根本不喜歡上面的解決方案,下面是你上面的代碼的簡化版本,刪除索引的需要:
String[] letters = new String[26];
for (char c = 'a'; c <= 'z'; c++) letters[c - 'a'] = Character.toString(c);
System.out.println(Arrays.toString(letters));
在Java中, char
s可以被視爲int
s,因爲在表面之下,它們都被存儲爲數字。
移動'int i = 0;'循環外 – Eran