我使用正则表达式和字符串 replaceFirst 来替换下面的模式。
String xml = "<param>otpcode=1234567</param><param>password=abc123</param>";
if(xml.contains("otpcode")){
Pattern regex = Pattern.compile("<param>otpcode=(.*)</param>");
Matcher matcher = regex.matcher(xml);
if (matcher.find()) {
xml = xml.replaceFirst("<param>otpcode=" + matcher.group(1)+ "</param>","<param>otpcode=xxxx</param>");
}
}
System.out.println(xml);
if (xml.contains("password")) {
Pattern regex = Pattern.compile("<param>password=(.*)</param>");
Matcher matcher = regex.matcher(xml);
if (matcher.find()) {
xml = xml.replaceFirst("<param>password=" + matcher.group(1)+ "</param>","<param>password=xxxx</param>");
}
}
System.out.println(xml);
期望的 O/p
<param>otpcode=xxxx</param><param>password=abc123</param>
<param>otpcode=xxxx</param><param>password=xxxx</param>
实际 o/p(在第一个 IF 本身中一次性替换整个字符串)
<param>otpcode=xxxx</param>
<param>otpcode=xxxx</param>
最佳答案
你需要做一个非贪婪的正则表达式:
<param>otpcode=(.*?)</param>
<param>password=(.*?)</param>
这将匹配第一个 </param>
不是最后一个...
关于java - 在java中查找和替换字符串模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31386076/