我试图找出Java中是否有任何方法可以实现以下目的。
我想传递一个方法,如下面的参数
"(hi|hello) my name is (Bob|Robert). Today is a (good|great|wonderful) day."
我想让方法选择括号内的一个单词,用'|'分隔并使用随机选择的单词之一返回完整的字符串。 Java是否有任何方法可以解决这个问题,还是我必须使用循环中的字符检查来自己编写代码?
答案 0 :(得分:6)
您可以通过正则表达式解析它。
正则表达式为\(\w+(\|\w+)*\)
;在替换中你只需将参数拆分为'|'并返回随机单词。
像
这样的东西import java.util.regex.*;
public final class Replacer {
//aText: "(hi|hello) my name is (Bob|Robert). Today is a (good|great|wonderful) day."
//returns: "hello my name is Bob. Today is a wonderful day."
public static String getEditedText(String aText){
StringBuffer result = new StringBuffer();
Matcher matcher = fINITIAL_A.matcher(aText);
while ( matcher.find() ) {
matcher.appendReplacement(result, getReplacement(matcher));
}
matcher.appendTail(result);
return result.toString();
}
private static final Pattern fINITIAL_A = Pattern.compile(
"\\\((\\\w+(\\\|\w+)*)\\\)",
Pattern.CASE_INSENSITIVE
);
//aMatcher.group(1): "hi|hello"
//words: ["hi", "hello"]
//returns: "hello"
private static String getReplacement(Matcher aMatcher){
var words = aMatcher.group(1).split('|');
var index = randomNumber(0, words.length);
return words[index];
}
}
(请注意,此代码仅用于说明一个想法,可能无法编译)
答案 1 :(得分:5)
可能有帮助,
传递三个字符串(“hi | hello”),(Bob | Robert)和(good | great | wonderful)作为方法的参数。
Inside方法将字符串拆分为数组
by,firststringarray[]=thatstring.split("|");
将此用于其他两个。
并使用this来使用随机字符串选择。
答案 2 :(得分:1)
据我所知,java没有任何方法可以直接进行。
我必须为它或regexe编写代码
答案 3 :(得分:0)
我认为Java没有任何可以直接做你想要的东西。就个人而言,我不会做基于正则表达式或字符的事情,而是制作类似的方法:
String madLib(Set<String> greetings, Set<String> names, Set<String> dispositions)
{
// pick randomly from each of the sets and insert into your background string
}
答案 4 :(得分:0)
没有直接的支持。理想情况下,您应该尝试低级解决方案。
你应该搜索'随机句子生成器'。你的写作方式
`(Hi|Hello)`
等。被称为语法。你必须为语法编写一个解析器。再次提供了许多用于编写解析器的解决方案。有标准的方法来指定语法。寻找BNF。
解析器和生成器问题已经解决了很多次,问题的有趣部分将是编写语法。
答案 5 :(得分:0)
Java没有为此提供任何现成的方法。您可以使用Penartur描述的Regex或创建自己的java方法来拆分字符串并存储随机字。如果遵循第二种方法,StringTokenizer类可以帮助您。