Java中是否有一种方法可以用给定的字符串替换第一次出现的字符串?
我正在尝试用Java编写一个madlibs程序。有一个方法将模板字符串、该字符串中所有占位符的ArrayList以及将替换这些模板的所有用户输入的ArrayList作为参数 方法如下所示:Java中是否有一种方法可以用给定的字符串替换第一次出现的字符串?,java,arraylist,string-algorithm,Java,Arraylist,String Algorithm,我正在尝试用Java编写一个madlibs程序。有一个方法将模板字符串、该字符串中所有占位符的ArrayList以及将替换这些模板的所有用户输入的ArrayList作为参数 方法如下所示: private String replacePlaceHolder(String template, ArrayList<String> placeholders, ArrayList<String> replacements){ for (int i = 0; i &
private String replacePlaceHolder(String template, ArrayList<String> placeholders, ArrayList<String> replacements){
for (int i = 0; i < placeholders.size(); i++){
template = template.replace(placeholders.get(i), replacements.get(i));
}
return template;
}
我知道占位符的ArrayList与模板中的占位符匹配,并且该ArrayList的长度与用户输入的ArrayList的长度相同
我应该怎么做呢?
replaceFirst
是正确答案,但参数是正则表达式,因此需要引用搜索文本,特别是因为它使用了字符类的特殊正则表达式[]
要引用这些值,请对第一个参数和第二个参数使用
private static String replacePlaceHolder(String template, List<String> placeholders, List<String> replacements) {
for (int i = 0; i < placeholders.size(); i++){
template = template.replaceFirst(Pattern.quote(placeholders.get(i)),
Matcher.quoteReplacement(replacements.get(i)));
}
return template;
}
@kaya3我尝试了
replaceFirst()
,但它不起作用,所以我不认为这个问题是重复的。好吧,你的问题是如何替换第一次出现而不是每次出现,所以它是重复的。如果这不“起作用”,那么你可能想做其他事情,与你在问题中要求的不同。
private static String replacePlaceHolder(String template, List<String> placeholders, List<String> replacements) {
for (int i = 0; i < placeholders.size(); i++){
template = template.replaceFirst(Pattern.quote(placeholders.get(i)),
Matcher.quoteReplacement(replacements.get(i)));
}
return template;
}
String template = "Computer programming, also known as [-ing Verb], is a\n" +
"process that leads from a [Adjective] problem\n" +
"to an executable [Noun].\n" +
"Programming often involves [-ing Verb],\n" +
"[-ing Verb], and [-ing Verb], and can be learned\n" +
"by anyone!\n" +
"Source code is written in a programming language,\n" +
"such as [Animal]code, or Java.\n" +
"The first ever programmer was [Name of Celebrity],\n" +
"who invented [Plural Noun] in the year [Year].\n" +
"Since then, programming has become a\n" +
"[Adjective] practice all across the world.";
List<String> placeholders = Arrays.asList(
"[-ing Verb]", "[Adjective]", "[Noun]",
"[-ing Verb]", "[-ing Verb]", "[-ing Verb]",
"[Animal]", "[Name of Celebrity]", "[Plural Noun]",
"[Year]", "[Adjective]" );
List<String> replacements = Arrays.asList(
"AA", "BB", "CC",
"DD", "EE", "FF",
"GG", "HH", "II",
"JJ", "KK" );
String result = replacePlaceHolder(template, placeholders, replacements);
System.out.println(result);