replaceAll Dangling meta character '*' near index 0

replace 与replaceAll不同,replace的需要替换的参数是字符串,replaceAll需要替换的参数是正则

对字符串使用replaceAll()方法替换 * ? + / | 等字符的时候会报以下异常


Dangling meta character '*' near index 0

 

这主要是因为这些符号在正则表达示中有相应意义。

只需将其改为 [*] 或 //* 即可。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
这个错误是因为正则表达式中的`?`是一个特殊字符,表示匹配前面的字符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 = "中国南方航空官网-机票查询,机票预订"; String output = StringUtil.replacePunctuation(input); System.out.println(output); ``` 输出结果为: ``` 中国南方航空官网机票查询机票预订 ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值