我可以遍历字母表,但我想保留上一次迭代并添加下一个字母。这是我的代码。
for(char alphabet = 'a'; alphabet <='z'; alphabet ++ )
{
System.out.println(alphabet);
}
我希望它打印出类似于以下内容的东西。
a
ab
abc
abcd
abcde...以此类推。这是如何实现的?
char alphabet
添加到一个字符串中。String output = "";
for(char alphabet = 'a'; alphabet <='z'; alphabet++ )
{
output += alphabet;
System.out.println(output);
}
这对你应该有效 ;)
String += String
的方式,而应该使用 StringBuilder
。尽管这只是一个简单的不重要的循环,但从一开始就用正确的方式做,以便将其变成第二天性。 - Andreas我会选择使用 StringBuffer 或者 StringBuilder。例如:
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());
}
String vs StringBuffer vs StringBuilder:
String: 它是不可变的,所以当您对字符串进行任何修改时,它将创建新实例并会很快占用内存。
StringBuffer: 您可以使用它来创建动态字符串,同时只有1个对象,因此使用的内存非常少。它是同步的(这使它变慢)。
StringBuilder: 它类似于StringBuffer。唯一的区别是:它不是同步的,因此速度更快。
因此,更好的选择是StringBuilder。阅读更多。
使用Java 8
StringBuilder sb = new StringBuilder();
IntStream.range('a', 'z').forEach(i -> {
sb.append((char) i);
System.out.println(sb.toString());
});
StringBuffer
已经过时,请使用StringBuilder
。引用javadoc的话:“自JDK 5发布以来,StringBuffer
已被一个等效的类所取代,该类专为单线程设计,即StringBuilder
。” - AndreasStringBuffer
是同步的,这使得它的速度较慢。除非你处于极为罕见的情况下,多个线程同时向同一个缓冲区追加内容,否则你不应该使用它。始终使用StringBuilder
,养成这个习惯。我建议从答案中删除StringBuffer
,以免误导任何新手Java开发者。 - Andreas我建议使用 StringBuilder
类:
// Using StringBuilder
StringBuilder buf = new StringBuilder();
for (char c = 'a'; c <= 'z'; c++)
System.out.println(buf.append(c).toString());
你也可以使用char[]
比使用StringBuilder
稍微快一点,然而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()
,所以响应时间恶劣,呈指数增长。String s = "" ;
for(char alphabet = 'a'; alphabet <='z'; alphabet ++ )
{
s = s.concat(String.valueOf(alphabet));
System.out.println(s);
}
离题一下,使用Java 8
IntStream就像这样简单:
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);
}
}
IntStream.range
,需要加上 +1
才能得到最后一个字母 Z。StringBuilder sb = new StringBuilder();
IntStream.range('a', 'z'+1).forEach(i -> {
sb.append((char) i);
System.out.println(sb.toString());
});