Javastringreplace不工作

String delimiter = "\\*\\*"; String html = "<html><head></head><body>**USERNAME** AND **PASSWORD**</body></html>"; Map<String, String> mp = new HashMap<String, String>(); mp.put("USERNAME", "User A"); mp.put("PASSWORD", "B"); for (Entry<String, String> entry : mp.entrySet()) { html.replace(delimiter + entry.getKey()+ delimiter, entry.getValue()); } 

这通常应该取代这两个string,但它不。 有没有人有一个想法?

string是不可变的,这意味着html引用不会改变,而replace方法返回一个新的String对象,你必须指定。

 html = html.replace(delimiter + entry.getKey()+ delimiter, entry.getValue()); 

replace方法返回你的结果,你丢弃。

你不需要转义字符。 replacereplaceAll之间的区别在于, replace为我们自动replace任何正则expression式元字符:

 String delimiter = "**"; 

正如你所说的,你放弃了结果,replace并不只是一个正则expression式字符序列被replace,所以你不需要在分隔符

但是replaceAll和replaceFirst做一个正则expression式string(坏devise)

另外最好使用Patter.quote(String)Matcher.quoteReplacement(String)来确保在使用正则expression式时不会出现奇怪的事情(这样做更容易一点,并且确保在转义字符时没有错误)

这是为什么只有一个事件必须被replace

 String delimiter = "**"; String html = "<html><head></head><body>**USERNAME** AND **PASSWORD**</body></html>"; Map<String, String> mp = new HashMap<String, String>(); mp.put("USERNAME", "User A"); mp.put("PASSWORD", "B"); for (Map.Entry<String, String> entry : mp.entrySet()) { html = html.replace(delimiter + entry.getKey()+ delimiter, entry.getValue()); } 

这是为什么多次出现必须被replace

 String delimiter = "**";//unescaped because I'm handling that in my replace String html = "<html><head></head><body>**USERNAME** AND **PASSWORD**</body></html>"; Map<String, String> mp = new HashMap<String, String>(); mp.put("USERNAME", "User A"); mp.put("PASSWORD", "B"); for (Map.Entry<String, String> entry : mp.entrySet()) { html = html.replaceAll(Pattern.quote(delimiter + entry.getKey()+ delimiter), Matcher.quoteReplacement(entry.getValue())); } 

比喻:

如果您的桌面上有不可变的文件。 要进行一些更改,请执行复制和replace。 这会导致一种状态,除非您有备份,否则无法访问旧文件。

在像JavaJavaScriptpythonC#这样的大多数计算机语言中, replace方法不会replace/修改string。 它只对前一个string进行操作,并返回一个包含所有更改的新string。

现在,如果你真的想存储更改,你需要得到返回的string在同一个variables(如果你的情况允许的话)或新的variables。

String是一个不可变的types,所以我们应该新build一个String对象来保存replace方法返回的新String

 html = html.replace(delimiter + entry.getKey()+ delimiter, entry.getValue());