1

我已经尝试解决这个问题将近 3 天。我仍然不知道如何解决它。
有一个输入字符串(例如):

In software, a stack overflow [apple] occurs when too much memory [orange] is used on the call stack [banana]. 
The call stack [pear] contains a limited amount of memory, often determined at the start of the program [apple].

我喜欢做的是将单词, [apple], [orange],[banana]替换为, , , 。 实际上,经过将近 1 天,我发现了一个正则表达式,可以找出以 开头和结尾的模式,即 我不知道如何存储单词列表([apple],[orange]...) . 我应该使用还是?? 以及如何在“最快的时间”中循环并替换为相应的字符串? [pear]<img src="apple.jpg"><img src="orange.jpg"><img src="banana.jpg"><img src="pear.jpg">
"[""]"(?<=\\[)\\w+(?=])

HashMapArrayList
HashMapArrayList

在此示例中,列表仅包含 4 个内容。但实际上,列表中的东西可能超过 500 件。
虽然我找到了模式,但我仍然无法解决这个问题,因为我不知道如何找到输入字符串中的所有模式,然后找出所有模式,然后检查列表中是否有这个模式,然后替换使用正确的字符串。
请注意,在这个例子中,[apple]是替换为<img src="apple.jpg">,但实际上xxx.jpg 在 [ xxx] 中可能不一样。但我有这个映射的列表。
我真的很想解决这个问题,请帮我解决并提供示例编码。
非常感谢。

4

3 回答 3

1
String poem = "In software, a stack overflow [apple] occurs"
    + " when too much memory [orange] is used on the call stack [banana]."
    + " The call stack [pear] contains a limited amount of memory,"
    + " often determined at the start of the program [apple].";

Map<String, String> rep = new HashMap<String, String>();

rep.put("[apple]", "<img src='apple.jpg' />");
rep.put("[banana]", "<img src='banana.jpg' />");
rep.put("[orange]", "<img src='orange.jpg' />");
rep.put("[pear]", "<img src='pear.jpg' />");

for (Map.Entry<String, String> entry : rep.entrySet()) {
    poem = poem.replace(entry.getKey(), entry.getValue());
}

// poem now = what you want.
于 2013-05-01T14:19:15.057 回答
0

我对正则表达式还是新手,但我相信您想要做的是使用分组以及模式和匹配器来替换匹配的特定部分。

您想对您的正则表达式进行分组并仅用相关代码替换“[”和“]”。

String poem = "In software, a stack overflow [apple] occurs when too much memory    [orange] is used on the call stack [banana]. The call stack [pear] contains a limited amount   of memory, often determined at the start of the program [apple].";
Pattern p = Pattern.compile("(\\[)(\\w*)(\\])");
Matcher m = p.matcher(poem);
poem = m.replaceAll("<img src='$2.jpg' />");

这就是我为使其适用于您的示例所做的工作。希望有帮助(它至少帮助我学习了更多的正则表达式!)。

于 2013-05-01T15:18:20.893 回答
0

如果您坚持使用正则表达式来完成此任务...

String poem = "In software, a stack overflow [apple] occurs"
                + " when too much memory [orange] is used on the call stack [banana]."
                + " The call stack [pear] contains a limited amount of memory,"
                + " often determined at the start of the program [apple].";

        List<String> fruits = new ArrayList<String>();
        fruits.add("[apple]");
        fruits.add("[banana]");
        fruits.add("[pear]");
        fruits.add("[orange]");

        String pattern = "\\[(?<=\\[)(\\w+)(?=])\\]";
        poem = poem.replaceAll(pattern, "<img src='$1.jpg' />");

        System.out.println(poem);

您可以看到代码的这种动态运行

于 2013-05-01T15:04:48.793 回答