Скажем, например, я хочу взять эту фразу:
{{Hello | What Up | Howdy} {world | planet} |{Goodbye | Later} {люди | граждане | жители}}
и случайным образом превращают его в одно из следующего:
Hello world
Goodbye people
What's Up word
What's Up planet
Later citizens
etc.
Основная идея заключается в том, что заключено в каждую паруфигурных скобок будет неограниченное количество вариантов, разделенных "|".Программа должна пройти и случайным образом выбрать один вариант для каждого набора скобок.Имейте в виду, что фигурные скобки могут бесконечно вкладываться друг в друга.Я нашел ветку об этом и попытался преобразовать ее в Java, но это не сработало.Вот код Python, который предположительно работал:
import re
from random import randint
def select(m):
choices = m.group(1).split('|')
return choices[randint(0, len(choices)-1)]
def spinner(s):
r = re.compile('{([^{}]*)}')
while True:
s, n = r.subn(select, s)
if n == 0: break
return s.strip()
Вот моя попытка преобразовать этот код Python в Java.
public String generateSpun(String text){
String spun = new String(text);
Pattern reg = Pattern.compile("{([^{}]*)}");
Matcher matcher = reg.matcher(spun);
while (matcher.find()){
spun = matcher.replaceFirst(select(matcher.group()));
}
return spun;
}
private String select(String m){
String[] choices = m.split("|");
Random random = new Random();
int index = random.nextInt(choices.length - 1);
return choices[index];
}
К сожалению, когда я пытаюсь проверить это, вызвав
generateAd("{{Hello|What's Up|Howdy} {world|planet} | {Goodbye|Later} {people|citizens|inhabitants}}");
В основной части моей программы она выдает ошибку в строке в generateSpun, где объявляется Pattern reg, и дает мне PatternSyntaxException.
java.util.regex.PatternSyntaxException: Illegal repetition
{([^{}]*)}
Может кто-то попытаться создатьметод Java, который будет делать то, что я пытаюсь сделать?