java 字符串获取表达式#{} 内的字符串 并替换对应值
时间: 2023-07-16 12:17:13 浏览: 83
在 Java 中,获取字符串中的表达式可以使用正则表达式进行匹配。如果表达式形如`#{expression}`,可以使用以下代码来获取其中的`expression`:
```java
Pattern pattern = Pattern.compile("#\\{(.+?)\\}");
Matcher matcher = pattern.matcher(inputString);
if (matcher.find()) {
String expression = matcher.group(1);
// 处理 expression
}
```
其中,`#\\{(.+?)\\}`是用来匹配`#{expression}`的正则表达式,`(.+?)`表示匹配任意字符,`+?`表示非贪婪匹配。`matcher.find()`用来查找第一个匹配的字符串,`matcher.group(1)`用来获取第一个括号内匹配的内容,也就是`expression`。
获取到`expression`之后,可以根据具体需求进行处理,比如替换为对应的值。例如,如果表达式是一个变量名,可以从一个 Map 中获取对应的值进行替换:
```java
Map<String, String> variables = new HashMap<>();
variables.put("name", "张三");
String result = inputString.replaceAll("#\\{(.+?)\\}", match -> {
String expression = match.group(1);
return variables.getOrDefault(expression, "");
});
```
其中,`replaceAll`方法用来替换所有匹配的字符串,第二个参数是一个 Lambda 表达式,用来处理每一个匹配的字符串。这里使用了`match.group(1)`来获取表达式中的`expression`,然后从`variables`中获取对应的值进行替换。如果`variables`中不存在对应的变量,就返回空字符串。
阅读全文