2015-10-16 122 views
0

我可以遍歷字母表,但我試圖保留最後一次迭代並添加下一個字母。 這是我的代碼。for循環,通過字母重複? java

for(char alphabet = 'a'; alphabet <='z'; alphabet ++) 
     { 

      System.out.println(alphabet); 
     } 

我希望它打印出看起來像這樣的東西。

一個

AB

ABC

ABCD

ABCDE .....等等。這怎麼可能?

+1

創建一個字符串變量,並與當前字母拼接它... –

回答

3

您需要將char alphabet添加到字符串中。

String output = ""; 

for(char alphabet = 'a'; alphabet <='z'; alphabet++) 
    { 
     output += alphabet; 
     System.out.println(output); 
    } 

這應該爲你工作;)

+9

決不在循環中使用'String + = String'。使用'StringBuilder'。當然,這是一個小小的不重要的循環,但是要以正確的方式開始,所以它變成了第二天性。 – Andreas

+0

我編輯了2秒後,我發佈了哈哈!如此快速的響應時間哈哈。有一點需要注意。輸出+ =字母表需要在打印語句System.out.println(output + = alphabet)中; – pewpew

+1

我不認爲必須在System.out中。你爲什麼這麼認爲? – Stefan

4

我會去與StringBufferStringBuilder。喜歡的東西:

StringBuffer

StringBuffer sb = new StringBuffer(); 
for (char alphabet = 'a'; alphabet <= 'z'; alphabet++) { 
    sb.append(alphabet); 
    System.out.println(sb.toString()); 
} 

StringBuilder

StringBuilder sb = new StringBuilder(); 
for (char alphabet = 'a'; alphabet <= 'z'; alphabet++) { 
    sb.append(alphabet); 
    System.out.println(sb.toString()); 
} 

字符串VS StringBuffer的VS StringBuilder的

字符串:這是不可改變的,所以當你做任何修飾字符串,它會創建新的實例,並會吃掉內存太快。

StringBuffer:您可以使用它來創建動態字符串,同時只有1個對象將在那裏,所以使用的內存將會非常少。它是同步的(這會讓它變慢)。

StringBuilder:它類似於StringBuffer。其他的區別是:它不同步,因此速度更快。

所以,更好的選擇是StringBuilderRead more

使用Java 8

StringBuilder sb = new StringBuilder(); 

IntStream.range('a', 'z').forEach(i -> { 
    sb.append((char) i); 
    System.out.println(sb.toString()); 
}); 
+0

'StringBuffer'已過時。使用'StringBuilder'。引用[javadoc](http://docs.oracle.com/javase/7/docs/api/java/lang/StringBuffer.html):*「從版本JDK 5開始,'StringBuffer'已經補充了一個等效的類設計用於單線程'StringBuilder'。「* – Andreas

+0

我已經在我的解決方案中添加了這兩個。 – Ambrish

+0

'StringBuffer'被同步,這使得它變慢。除非你遇到多線程追加到同一緩衝區的極其罕見的情況,否則不應該使用它。總是使用'StringBuilder'。讓它成爲一種習慣。我建議從答案中刪除'StringBuffer',以免誤導任何來到這裏的新手Java開發人員。 – Andreas

0
String s = "" ; 
for(char alphabet = 'a'; alphabet <='z'; alphabet ++) 
     { 
      s = s.concat(String.valueOf(alphabet)); 
      System.out.println(s); 
     } 
+0

我假設他會在循環之外聲明它:)。無論如何編輯答案 – Rehman

+0

雖然這可能在理論上回答這個問題,但這不是一個很好的答案,因爲它沒有教導OP。相反,它給出了一個沒有解釋的替代方案這通常會導致OP沒有學習,並且在發生類似問題時回到問一個新問題。你介意添加一些解釋嗎? – Vogel612

2

我建議使用一個StringBuilder

// Using StringBuilder 
StringBuilder buf = new StringBuilder(); 
for (char c = 'a'; c <= 'z'; c++) 
    System.out.println(buf.append(c).toString()); 

你也可以做到這一點稍快用char[],但是StringBuilder更明顯,更容易使用:

// Using char[] 
char[] arr = new char[26]; 
for (int i = 0; i < 26; i++) { 
    arr[i] = (char)('a' + i); 
    System.out.println(new String(arr, 0, i + 1)); 
} 

替代品,你不應該使用:

  • StringBuffer:同StringBuilder,但同步,因此速度較慢。
  • s = s.concat(new String(c)):每次迭代分配2字符串,而不是僅1
  • s += c:內部+=被編譯爲s = new StringBuilder().append(s).append(c).toString(),所以窘況慢與指數響應時間。
0

Offtopic,使用Java 8IntStream很簡單:

StringBuilder builder = new StringBuilder(""); 
"abcdefghijklmnopqrstuvwxyz".chars().mapToObj(i -> builder.append((char) i)) 
     .forEach(System.out::println); 

用法:

public class AlphabetsLooping { 
    static final String input = "abcdefghijklmnopqrstuvwxyz"; 

    public static void main(String[] args) { 

    StringBuilder builder = new StringBuilder(""); 
    input.chars().mapToObj(i -> builder.append((char) i)) 
      .forEach(System.out::println); 
    } 
}