2017-07-18 325 views
1

我正在嘗試使用for循環將字符a-z輸入到字符串數組中,但我沒有太多的運氣將字符轉換爲字符串值,因此它們實際上會進入字符串數組中。我一直得到空值作爲我的輸出。任何人都可以提供一些關於如何將字符放入字符串數組的提示嗎? 這是我到目前爲止有:如何將字符輸入到字符串數組中?

String[] letters = new String[26]; 
    for (char ch = 'a'; ch <= 'z'; ch++) 
    { 
    int i = 0; 
    letters[i] = String.valueOf(ch); 
    i++; 
    } 
    System.out.println(Arrays.toString(letters)); 
+7

移動'int i = 0;'循環外 – Eran

回答

5
String[] letters = new String[26]; 
int i = 0; 
for (char ch = 'a'; ch <= 'z'; ch++) 
{ 
    letters[i] = String.valueOf(ch); 
    i++; 
} 
System.out.println(Arrays.toString(letters)); 

試試這個。我= 0應該在循環之外。

0

移動int i = 0;像葉蘭外循環或者說就是不使用另一個櫃檯,而是由序字符表示判斷指數:

String[] letters = new String[26]; 
for (char ch = 'a'; ch <= 'z'; ch++) { 
    int index = (int) ch - 97; 
    letters[index] = String.valueOf(ch); 
} 
System.out.println(Arrays.toString(letters)); 

此外,您不必使用另一個局部變量,可以只當然要做letters[(int) ch - 97] = ...

0

您將每次插入字母[0],將變量i保留在循環外。

String[] letters = new String[26]; 
    int i = 0; 
    for (char ch = 'a'; ch <= 'z'; ch++) 
    { 
    letters[i++] = String.valueOf(ch); 
    } 
    System.out.println(Arrays.toString(letters)); 
0
for (char ch = 'a'; ch <= 'z'; ch++){ 
    int i = 0; 
    letters[i] = String.valueOf(ch); 
    i++; 
} 

你需要了解它做什麼:在每次迭代你初始化變量i0所以你永遠不會在其他地方比字母寫[0]

您需要只有將其設置爲0,然後增加它,所以只是把指令循環之前


的其他簡單的方法是唯一的:

char[] letters = "abcdefghijklmnopqrstuvwxyz".toCharArray(); 
+0

但她/他想要一個字符串數組而不是字符;) – Alex

0

爲了您的特殊目的,使用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)使得從第一intStreamint s到第二,包括兩個端點的。我們使用這個,因爲沒有CharStream類(出於某種原因),但我們仍然可以使用char s 'a''z',它們將被隱式轉換爲它們的int值。
  • mapToObj需要將Stream的每個int轉換爲對象的功能。它在這裏變得有點混亂,因爲沒有從intString的單步轉換,我們首先需要將int解釋爲字符值。因此,我們將每個int(命名爲i)投射到char,然後將其換算爲從charStringi -> Character.toString((char)i)的轉換。這會給我們留下一個Stream<String>
  • 現在,我們希望輸出爲String[],根據您的問題。 Stream有一個toArray方法,但這會給我們一個惱人的Object[]結果。相反,我們將提供我們想用來構建數組的方法。我們不想要任何花哨的東西,所以我們只需使用標準初始值設定項即可得到String數組:toArray(String[]::new)

在此之後,letters將等於的String秒的陣列,並且每一個將依次是字母從az

如果您沒有訪問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,因爲在表面之下,它們都被存儲爲數字。

相關問題