Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/341.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java中是否有一种方法可以用给定的字符串替换第一次出现的字符串?_Java_Arraylist_String Algorithm - Fatal编程技术网

Java中是否有一种方法可以用给定的字符串替换第一次出现的字符串?

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 &

我正在尝试用Java编写一个madlibs程序。有一个方法将模板字符串、该字符串中所有占位符的ArrayList以及将替换这些模板的所有用户输入的ArrayList作为参数

方法如下所示:

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);