2012-09-08 72 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字符串進行哈希 –