比如说我想用这个短语:
{{Hello|What's Up|你好} {world|planet} | {再见|稍后} {人民|公民|居民}}
并随机使其成为以下之一:
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}}");
在我的程序的主体中,它在声明 Pattern reg 的 generateSpun 行中给了我一个错误,给了我一个 PatternSyntaxException。
java.util.regex.PatternSyntaxException: Illegal repetition
{([^{}]*)}
有人可以尝试创建一个 Java 方法来做我想做的事情吗?