2012-01-13 207 views
2

所以,我需要做一個方法,將返回一個隨機字符串基於jython給定的長度。如果我可以隨意實現python,那很容易,但是我找不到這樣做的方法,因爲在每個隨機示例中,我發現使用java隨機類而不是python。 下面是代碼位:Jython隨機字符串生成

def getrstr (self, length): 
    from java.util import Random 
    import string 
    chars = string.letter + string.digits 
    str = '' 
    for i in range(1, (length+1)): 
     ind = random.nextInt(62) #there should be 62 charicters in chars string 
     c = #this is the part where i should get radom char from string using ind 
     str = str + c 
    return str 

我試圖讓基於包含我需要的所有字符字符串的字符串。我只是無法通過索引找到一種方法來訪問字符串中的字符,就像我在C#中一樣。

任何想法如何做到這一點,甚至可能導入python隨機類?

回答

1
c = chars.charAt(ind); 

JavaDocs指導方式。

+0

是的,但在這種情況下,我該如何區分python和java提供的類?我沒有導入java.lang.String類,並將該字符串作爲java字符串對象,但它仍然認爲它是一個python對象,因此無法調用charAt方法。有任何想法嗎? – TheBW 2012-01-13 09:18:19

+1

如果它仍然是一個python對象,爲什麼你不能用[]符號來訪問它?我有一段時間沒有與Jython合作過,但是IIRC應該仍然有效。否則,用'charsJava = java.lang.String(chars)'創建一個Java對象或者其他的東西。 – Naltharial 2012-01-13 09:47:20

2

試試這個,它爲我的作品使用Jython:

def getrstr(self, length): 
    import random, string 
    seq = string.letters + string.digits 
    randomstr = [] 
    for i in xrange(length): 
     randomstr.append(random.choice(seq)) 
    return ''.join(randomstr) 

請注意,我用Jython的random模塊,而不是Java的Random類。甚至更短的版本,使用列表解析與模塊級導入(按照pep-8):

import random, string 

def getrstr(self, length): 
    seq = string.letters + string.digits 
    return ''.join(random.choice(seq) for _ in xrange(length)) 
+2

[pep-8](http://www.python.org/dev/peps/pep-0008/)建議進行模塊級導入。 – jfs 2012-01-13 19:20:36

+0

@ J.F.Sebastian根據你的建議編輯了我的答案。我同意,但認爲對於OP來說是可以的,因爲在他的問題中,進口是在該方法之內。 – 2012-01-13 19:26:30