2012-09-08 108 views
-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。有没有人有一段代码会使字符串'无限'?

编辑:我需要做一个字符串列表像this example:并不需要在相同的顺序,只是一堆字符串]

编辑2:我想使this example工作得更好,并永远运行。

+4

无限将导致stackoverflowexception – tehdoommarine

+1

我不太清楚你想要做什么。什么是无限的字符串列表?你能做出一些永不停歇的事情吗? –

+1

听起来像你想[流](http://en.wikipedia.org/wiki/Stream_(type_theory))。 – oldrinb

回答

1

如果你想制作一个无限长的字符串,你最终会收到一个stackoverflow异常。

同样:

string badString = ""; 
Random random = new Random(); 
while(true) 
{ 
    int asciiNum = random.nextInt(25) + 97; 
    badString = badString + Character.toChars(asciiNum); 
} 

将导致由的无限数量的BADSTRING,但程序会崩溃由于内存不足的错误。

请参阅本作的详细信息:

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

如果你想无限运行
+0

我想它是一个像这样的随机字符串.... a,比aa,比aaa,[一堆这些]比ab,abb,abbb等等 –

+0

您将要使用随机然后等级。从97 -122产生一个随机int(小写a-z ascii值)。转换为字符并添加到字符串。 – tehdoommarine

+3

Nitpick:它可能是['OutOfMemoryError'](http://docs.oracle.com/javase/7/docs/api/java/lang/OutOfMemoryError.html)而不是['StackOverflowError'](http ://docs.oracle.com/javase/7/docs/api/java/lang/StackOverflowError.html)。 –

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", 
... 
] 
+0

“长度”是字符串的最大长度。 –

+0

我更新了答案一点。 – aiodintsov

+0

它仍然不能解释为什么我的代码只会产生1个字符串:P –

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); 
} 
+0

我试试这个,谢谢你的时间! –

+0

@JoshuaKatz我没有尝试重新实现你的方法,它仅仅是一个示例来演示...... :-p – oldrinb

+0

不,这不是我想要的,我想制作一个字符串列表。因此,制作一个字符串“a”并将其添加到列表中。并制作下一个字符串“aa”。我看到,如果我可以制作比MD5更好的加密方法,并且需要了解需要多长时间才能打破MD5 [就像在散列中一样]。我只需要用infa-gen字符串进行哈希 –