当前位置: 首页 > news >正文

解决`Illegal group reference: group index is missing`的两种方式

说明:记录使用String API的错误,报错信息如下:

java.lang.IllegalArgumentException: Illegal group reference: group index is missing
        at java.util.regex.Matcher.appendReplacement(Matcher.java:819) ~[?:1.8.0_402]
        at java.util.regex.Matcher.replaceAll(Matcher.java:955) ~[?:1.8.0_402]
        at java.lang.String.replaceAll(String.java:2223) ~[?:1.8.0_402]

场景

在使用String的这个API,来替换字符串的时候抛出的,如下:

    public static void main(String[] args) {
        String str = "我对钱不感兴趣";
        System.out.println(str.replaceAll("钱", "美金($)"));
    }

在这里插入图片描述

原因是使用了美元符号($),美元符号是在底层替换的时候,是有特殊含义的,不能出现在第二个参数里;

在这里插入图片描述

解决

方法一

可以在替换前,使用APIMatcher.quoteReplacement过一遍,如下:

    public static void main(String[] args) {
        String str = "我对钱不感兴趣";
        System.out.println(str.replaceAll("钱", Matcher.quoteReplacement("美金($)")));
    }

方法二

或者手动添加转义符,如下:

    public static void main(String[] args) {
        String str = "我对钱不感兴趣";
        System.out.println(str.replaceAll("钱","美金(\\$)"));
    }

两种效果一样,如果是确定的字符串,可以用方法二,手动转义,如果是不确定的,可以使用方法一;

相关文章:

  • 【linux学习指南】⽣产者消费者模型
  • python电影数据分析及可视化系统建设
  • 深度学习在天文观测中的应用:解锁宇宙的奥秘
  • `fi` 是 Bash 脚本中用来结束 `if` 条件语句块的关键字
  • 数位dp入门详解
  • [Vivado报错] [Common 17-55]‘set_property‘ expects at least one object
  • 【数据库维护】Clickhouse数据库维护关键系统表相关指标说明,支撑定位慢SQL及多实例场景下分析各实例运行情况
  • 【Java基础-46.1】Java 中创建自定义泛型类及其应用
  • 【机器学习】常见采样方法详解
  • AtCoder - arc101_b Median of Medians 分析与解答
  • 2009年下半年软件设计师上午真题的知识点整理(附真题及答案解析)
  • Kubernetes-master 组件
  • 25/2/16 <算法笔记> MiDas原理
  • ElasticSearch详解
  • 【开源免费】基于Vue和SpringBoot的美食烹饪互动平台(附论文)
  • 【HUSTOJ 判题机源码解读系列03】judge.cc 源码详细注释
  • 端到端测试利器:Playwright入门教程
  • 力扣 66.加一 (Java实现)
  • ROS应用之SwarmSim在ROS 中的协同路径规划
  • Baklib全场景云平台:一站式知识管理赋能企业效能升级
  • 花2万多在海底捞办婚礼,连锁餐企要抢酒楼的婚宴生意?
  • 屈晓华履新四川省社科联党组书记,此前担任省国动办主任
  • 纪录片《中国》原班人马打造,《船山先生》美学再升级
  • A股26家游戏企业去年营收近1900亿元:过半净利下滑,出海成为主流选择
  • 上市不足一年,吉利汽车拟私有化极氪并合并:整合资源,杜绝重复投入
  • 刘诚宇、杨皓宇进球背后,是申花本土球员带着外援踢的无奈