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方法返回你的结果,你丢弃。
你不需要转义字符。 replace
和replaceAll
之间的区别在于, 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。 这会导致一种状态,除非您有备份,否则无法访问旧文件。
在像Java
, JavaScript
, python
和C#
这样的大多数计算机语言中, replace
方法不会replace/修改string。 它只对前一个string进行操作,并返回一个包含所有更改的新string。
现在,如果你真的想存储更改,你需要得到返回的string在同一个variables(如果你的情况允许的话)或新的variables。
String是一个不可变的types,所以我们应该新build一个String对象来保存replace方法返回的新String
html = html.replace(delimiter + entry.getKey()+ delimiter, entry.getValue());