用java matcher替换所有

用java matcher替换所有,java,regex,Java,Regex,我正在尝试使用JAVA matcher在股票信息上添加超链接 例如,此字符串将被更改 你怎么看待三星和LG?我认为三星很好。 到 您如何看待和?我觉得很好。 但是,结果并不是我所期望的( 仅添加了005930 这是输出 你怎么看待和?我觉得很好。 这是我的代码片段。 我做错了什么 String multipleStocks = "How do you think about Samsung and LG? I think Samsung is good."; Pattern p = Patter

我正在尝试使用JAVA matcher在股票信息上添加超链接

例如,此字符串将被更改

你怎么看待三星和LG?我认为三星很好。

您如何看待和?我觉得很好。

但是,结果并不是我所期望的( 仅添加了005930

这是输出

你怎么看待和?我觉得很好。

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

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);
String multipleStocks=“您如何看待三星和LG?我认为三星很好。”;
Pattern p=Pattern.compile(“Hansum | LG | Samsung”);
匹配器m=p.匹配器(多块);
HashMap stocks=newhashmap();
股票看跌期权(“Hansum”、“020000”);
股票看跌期权(“三星”、“005930”);
股票看跌期权(“LG”,“003550”);
字符串ts=null;
while(m.find()){
System.out.println(m.group());
ts=m.replaceAll($0);
}
系统输出打印项次(ts);

试着用这个代替你的循环

for (String key : stocks.keySet()) {
    multipleStocks=multipleStocks.replaceAll(key, "<a "+stocks.get(key)+">$0</a>");
}

System.out.println(multipleStocks);
for(字符串键:stocks.keySet()){
MultipleStock=MultipleStock.replaceAll(键,$0”);
}
System.out.println(多锁);

我向其他社区询问了这个问题,有人给了我答案

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

    while(m.find()){
        m.appendReplacement(sb, "<a "+stocks.get(m.group(0))+">$0</a>");
    }
    m.appendTail(sb);
while(m.find()){
m、 (sb,“$0”);
}
m、 (某人);
replaceAll()是

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

第一个循环m.find()是matcher Samsung,但replaceAll()是matcher Samsung和LG

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

您可以注释此代码//ts=m.replaceAll(“”)


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

以告知您的答案。我找到了另一个解决方案,但您的解决方案运行良好。谢谢@rht.Oh,我发现了一个问题,即
库存中存在类似的按键
。例如,如果库存中存在
LG电子
,则链接将是
电子
@Gab acc需要2天ept自己的答案。谢谢Gab。谢谢,但我想给三星和LG等手机贴上html标签,不想看打印出来的内容。