我想为应用程序创建一个“无限”字符串列表。我试图用这个....
public static void runinfinite(int length) {
String lastString= " ";
while (true) {
if (lastString.length() > length)
break;
lastString = lastString.trim();
for (char c0 = 'a'; c0 <= 'z'; c0++) {
lastString += c0;
action(lastString);
}
}
}
它只给我这个:abcdefghijklmnopqrstuvwxyz
。有没有人有一个代码块可以使字符串“无限”?
编辑:我需要它来制作像this example这样的字符串列表:[不需要按相同的顺序,只需要一串字符串]
编辑2 :我希望this example更好地运作,并永远运行。
答案 0 :(得分:1)
如果你想创建一个无限长度的字符串,你最终会收到一个stackoverflow异常。
同样:
string badString = "";
Random random = new Random();
while(true)
{
int asciiNum = random.nextInt(25) + 97;
badString = badString + Character.toChars(asciiNum);
}
将导致badString由无限数量的a组成,但程序将因内存不足错误而崩溃。
请参阅此内容以获取更多信息:
http://docs.oracle.com/javase/1.5.0/docs/api/java/lang/Character.html#toChars%28int%29 http://docs.oracle.com/javase/6/docs/api/java/util/Random.html - 随机类
答案 1 :(得分:0)
如果你想无限运行,为什么要打破循环?
if (lastString.length() > length)
break; // <--- it stops your "infinite" loop
这条线的含义是什么?
lastString = lastString.trim();
它唯一能做的事情 - 从第一个赋值中删除初始空格,因为你永远不会用空格字符填充它。你可以从头开始轻松使用空字符串。
它在'z'之后停止只是因为你可能在调用函数时传递一个小于26的值作为你的长度参数。否则它会在下一个'z'之后停止,这会使字符串比你传入的数字长。
upd:你解释它的最大长度。 那怎么“无限”?或者你想要一个由“a”到“z”字符组成的“无限”字符串列表?或以下模式的“无限”列表:
for length = 10:
list = [
"a",
"ab",
"abc",
...
"abcdefghij", // reached max length
"a",
"ab",
...
]
答案 2 :(得分:0)
见my comment。您似乎想要stream。
这是一个例子......
static final Iterable<Character> alphabet() {
return new Iterable<Character>() {
private final char[] ALPHA = new char[] {
'a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j', 'k', 'l', 'm',
'n', 'o', 'p', 'q', 'r', 's', 't', 'u', 'v', 'w', 'x', 'y', 'z'
};
public final Iterator<Character> iterator() {
return new Iterator<Character>() {
private int cursor;
public boolean hasNext() {
return true;
}
public Character next() {
char ch = ALPHA[cursor];
cursor = (cursor + 1) % 26;
return ch;
}
public void remove() {
throw new UnsupportedOperationException("cannot remove from stream");
}
};
}
};
}
......加上:
for (final char ch : alphabet()) {
System.out.print(ch);
}