用java matcher替换all

时间:2016-07-18 09:15:23

标签: java regex

我试图使用JAVA匹配器添加股票信息的超链接。

例如,此字符串将被更改

How do you think about Samsung and LG? I think Samsung is good.

How do you think about <a href="" kospi-code="005930">Samsung</a> and <a href="" kospi-code="003550">LG</a>? I think <a href="" kospi-code="005930">Samsung</a> is good.

但是,结果不是我所期待的。 :( 它只被添加005930.

这是输出。

How do you think about <a href="" kospi-code="005930">Samsung</a> and <a href="" kospi-code="005930">LG</a>? I think <a href="" kospi-code="005930">Samsung</a> is good.

这是我的代码片段。 我错了什么?

String multipleStocks = "How do you think about Samsung and LG? I think Samsung is good.";
Pattern p = Pattern.compile("Hansum|LG|Samsung");
Matcher m = p.matcher(multipleStocks);

HashMap<String, String> stocks = new HashMap<String, String>();

stocks.put("Hansum", "020000");
stocks.put("Samsung", "005930");
stocks.put("LG", "003550");
String ts = null;

while(m.find()){
    System.out.println(m.group());
    ts = m.replaceAll("<a "+stocks.get(m.group(0))+">$0</a>"); 
}
System.out.println(ts);

3 个答案:

答案 0 :(得分:2)

尝试使用此代替循环。

{{1}}

答案 1 :(得分:0)

我问其他社区,有人给了我答案。

我使用Matcher.replaceAll,但我需要的是Matcher.appendReplacement

    while(m.find()){
        m.appendReplacement(sb, "<a "+stocks.get(m.group(0))+">$0</a>");
    }
    m.appendTail(sb);

答案 2 :(得分:0)

replaceAll()是

将与模式匹配的输入序列的每个子序列替换为给定的替换字符串。

第一个循环m.find()是匹配三星,但replaceAll()是匹配三星和LG。

第二个循环m.find()将返回false,因为m已更改。

你可以注释这段代码// ts = m.replaceAll(“”);

并执行,将打印三星LG三星