你给的代码为啥会报Exception in thread "main" java.util.regex.PatternSyntaxException: Dangling meta character '?' near index 0这个错误
时间: 2024-02-27 15:57:43 浏览: 152
这个错误是因为正则表达式中的`?`是一个特殊字符,表示匹配前面的字符0次或1次。如果想要匹配一个实际的`?`字符,需要使用`\?`来进行转义。
在上面的代码中,`replaceAll`方法中的正则表达式`[\\pP‘’“”]`和`<.*?>`中都没有对`?`进行转义,导致引发了这个错误。可以将这两个正则表达式修改为:
```java
output = output.replaceAll("[\\pP‘’“”]+", ""); // 将英文标点替换为空字符串,加上+号表示匹配一次或多次
output = output.replaceAll("<.*?>", ""); // 将<>标签替换为空字符串
```
这样就可以正常运行了,完整代码如下:
```java
public class StringUtil {
public static String replacePunctuation(String input) {
// 替换英文标点符号
Map<String, String> punctuationMap = new HashMap<>();
punctuationMap.put(",", ",");
punctuationMap.put(".", "。");
punctuationMap.put("?", "?");
punctuationMap.put("!", "!");
punctuationMap.put(":", ":");
punctuationMap.put(";", ";");
String output = input;
for (Map.Entry<String, String> entry : punctuationMap.entrySet()) {
output = output.replaceAll(entry.getKey(), entry.getValue());
}
// 替换<></>标签
output = output.replaceAll("<.*?>", "");
return output;
}
}
```
使用方法:
```java
String input = "中国<em>南方航空</em>官网-机票查询,机票预订";
String output = StringUtil.replacePunctuation(input);
System.out.println(output);
```
输出结果为:
```
中国南方航空官网机票查询机票预订
```
阅读全文