代码实现java字符串a="djd${1}${2}"和字符串b="djd34"比较,找出占位符对应的值
时间: 2023-08-07 16:25:22 浏览: 97
b.zip_djd_kandian.qq.com
好的,以下是一个实现,它使用了与上一个问题类似的正则表达式匹配方法,但是不需要对字符串进行替换,而是将匹配到的占位符和占位符对应的值保存到一个 Map 中:
```java
import java.util.HashMap;
import java.util.Map;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
public class StringMatcher {
public static void main(String[] args) {
String a = "djd${1}${2}";
String b = "djd34";
// 用正则表达式匹配 a 中的 ${...} 占位符
Pattern pattern = Pattern.compile("\\$\\{\\d+\\}");
Matcher matcher = pattern.matcher(a);
// 逐个匹配占位符,并将占位符和占位符对应的值保存到一个 Map 中
int index = 0;
Map<String, String> placeholders = new HashMap<>();
while (matcher.find()) {
int placeholderIndex = Integer.parseInt(matcher.group().substring(2, matcher.group().length() - 1));
if (placeholderIndex >= 1 && placeholderIndex <= b.length()) {
String placeholder = matcher.group();
String value = Character.toString(b.charAt(placeholderIndex - 1));
placeholders.put(placeholder, value);
}
}
// 输出结果
System.out.println("String a: " + a);
System.out.println("String b: " + b);
System.out.println("Matched placeholders and values:");
for (Map.Entry<String, String> entry : placeholders.entrySet()) {
System.out.println(entry.getKey() + " -> " + entry.getValue());
}
}
}
```
在上面的实现中,我们首先使用正则表达式 `\\$\\{\\d+\\}` 匹配字符串 a 中的 `${...}` 占位符,然后逐个匹配占位符,并将占位符和占位符对应的值保存到一个 Map 中。最后输出结果,输出结果应该为:
```
String a: djd${1}${2}
String b: djd34
Matched placeholders and values:
${1} -> 3
${2} -> 4
```
这个结果的意思是,字符串 a 中的 `${1}` 占位符对应的值是 `3`,`${2}` 占位符对应的值是 `4`。
阅读全文