-4

我想为应用程序制作一个“无限”的字符串列表。我试图用这个....

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。有没有人有一段代码可以使字符串“无限”?

编辑:我需要它来制作一个像这个例子一样的字符串列表:[不需要按照相同的顺序,只是一堆字符串]

编辑 2:我想让这个例子更好地工作,并永远运行。

4

3 回答 3

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 - 随机类

于 2012-09-08T20:44:27.587 回答
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",
...
]
于 2012-09-08T20:47:48.143 回答
0

我的评论。看来你想要一个

这是一个例子......

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);
}
于 2012-09-08T20:53:09.037 回答