无限的字符串创建

时间:2012-09-08 20:37:33

标签: java string infinite

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

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更好地运作,并永远运行。

3 个答案:

答案 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);
}