2012-01-13 166 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