2012-01-13 3 views
2

Итак, мне нужно создать метод, который возвращает случайную строку на основе заданной длины в jython. Было бы легко, если бы я мог реализовать python random, но не смог найти способ сделать это, так как в каждом случайном примере я обнаружил, что вместо python используется случайный класс java. Вот код немного:Генерация случайных строк 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

Да, но в этом случае, как разграничить между питона и ява при условии классов? Я импортировал класс java.lang.String и сделал эту строку символов как объект строки java, но он все еще считает ее объектом python, поэтому для этого метода charAt нельзя называть. Есть идеи? – TheBW

+1

Если это все еще объект python, почему вы не можете получить к нему доступ с помощью [] нотации? Я не работал с Jython некоторое время, но IIRC, который все еще должен работать. В противном случае создайте объект Java с помощью 'charsJava = java.lang.String (chars)' или что-то в этом роде. – Naltharial

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, не Random класса в Java. Еще более короткая версия, используя списковых с импортом уровня модуля (в соответствии с 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

+0

@ J.F.Sebastian отредактировал мой ответ в соответствии с вашим предложением. Я согласен, но думал, что это нормально для ОП, поскольку в его вопросе импорт находится внутри метода. –

Смежные вопросы