使用replaceAll时遇到的奇怪问题,请大家一起来讨论一下

yifuzhiming 2007-07-30 05:57:34
以下程序会出现
public class test {

public static void main(String[] args) {
String dd="dddddddddddd varstatus aaaaaaaaaaaaaa";
dd=dd.replaceAll("varstatus", "50$ sss");
System.out.print(dd);
}
}
异常信息如下
Exception in thread "main" java.lang.IllegalArgumentException: Illegal group reference
at java.util.regex.Matcher.appendReplacement(Unknown Source)
at java.util.regex.Matcher.replaceAll(Unknown Source)
at java.lang.String.replaceAll(Unknown Source)

如果我把程序修改如下就正常了

public class test {

public static void main(String[] args) {
String dd="dddddddddddd varstatus aaaaaaaaaaaaaa";
dd=dd.replaceAll("varstatus", "50% sss");
System.out.print(dd);
}
}
仔细看就是一个‘%’的问题
...全文
433 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
yifuzhiming 2007-08-08
  • 打赏
  • 举报
回复
还没搞懂啊,高手门,不过结了结了
混沌骑士 2007-07-31
  • 打赏
  • 举报
回复
牛 看源代码是正道
malligator 2007-07-31
  • 打赏
  • 举报
回复
$是有意义的。
$0,$1,...分别对应前面匹配的整个串, 第一个括号括起来的组,...
jackey024 2007-07-31
  • 打赏
  • 举报
回复
看看源代码就可以了对 $ 由处理的
while (cursor < replacement.length()) {
char nextChar = replacement.charAt(cursor);
if (nextChar == '\\') {
cursor++;
nextChar = replacement.charAt(cursor);
result.append(nextChar);
cursor++;
} else if (nextChar == '$') {
// Skip past $
cursor++;

// The first number is always a group
int refNum = (int)replacement.charAt(cursor) - '0';
if ((refNum < 0)||(refNum > 9))
throw new IllegalArgumentException(
"Illegal group reference");
cursor++;
jackey024 2007-07-31
  • 打赏
  • 举报
回复
// The first number is always a group
int refNum = (int)replacement.charAt(cursor) - '0';
if ((refNum < 0)||(refNum > 9))
throw new IllegalArgumentException(
"Illegal group reference");
奋斗并快乐着 2007-07-30
  • 打赏
  • 举报
回复
是很奇怪.$在正则表达式里匹配一行的末尾,
改成dd=dd.replaceAll("varstatus", "50\\$ sss");就没问题了.
但是replaceAll只有第一个参数是正则表达式,还没见过哪里说第二个参数也是正则表达式.

62,623

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧