Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

String replaceAll() and regex question

87 views
Skip to first unread message

grasp...@yahoo.com

unread,
May 27, 2006, 7:39:55 PM5/27/06
to
Hi All,

I would like to hand the replaceAll() method of String text that it
would interpret as literal text and not as a regex. In the code I am
trying to implement I am given two variables and a string and need to
replace one variable with the second in the string. If either of the
variables contains a special character (e.g. $) the replaceAll() method
can fail. An example of this is shown below. In the example below I
can escape the $ character with /$ but I don't want to have to search
each string for every potential trouble maker. I would like to tell
the regex to treat the entire string as a literal.

Any help would be appreciated.

Thanks,
John


public class Ouch {

public static void main(String[] args) throws Exception {
String start = "yours now for just <amount>";
String price = "$9.99";
String end = start.replaceAll("<amount>", price);
System.out.println(end);
}

}

Exception in thread "main" java.lang.IndexOutOfBoundsException: No
group 9
at java.util.regex.Matcher.group(Matcher.java:463)
at java.util.regex.Matcher.appendReplacement(Matcher.java:730)
at java.util.regex.Matcher.replaceAll(Matcher.java:806)
at java.lang.String.replaceAll(String.java:2000)
at Ouch.main(Ouch.java:7)

Martin Gerner

unread,
May 27, 2006, 8:32:18 PM5/27/06
to
grasp...@yahoo.com wrote in news:1148773195.171205.166250@
38g2000cwa.googlegroups.com:

> I would like to hand the replaceAll() method of String text that it
> would interpret as literal text and not as a regex.

What you probably want to use is actually String.replace(). The name is
unfortunate - it replaces more than one occurence, even if it is easy to
believe otherwise by just seeing the name (together with replaceAll()). see
the API for more info.

http://java.sun.com/j2se/1.5.0/docs/api/java/lang/String.html#replace
(char,%20char)


--
Martin Gerner

Martin Gerner

unread,
May 27, 2006, 8:33:36 PM5/27/06
to
Martin Gerner <martin...@nospam.com> wrote in
news:Xns97D119D348608ma...@129.16.222.141:

Hm, the link got bogged up. Well, just scroll down until you get on
replace.

--
Martin Gerner

Chris Smith

unread,
May 27, 2006, 8:43:42 PM5/27/06
to
<grasp...@yahoo.com> wrote:
> I would like to hand the replaceAll() method of String text that it
> would interpret as literal text and not as a regex. In the code I am
> trying to implement I am given two variables and a string and need to
> replace one variable with the second in the string. If either of the
> variables contains a special character (e.g. $) the replaceAll() method
> can fail.

Yep. See the static methods Pattern.quote and Matcher.quoteReplacement.

--
www.designacourse.com
The Easiest Way To Train Anyone... Anywhere.

Chris Smith - Lead Software Developer/Technical Trainer
MindIQ Corporation

g.rajesh...@gmail.com

unread,
May 27, 2006, 9:03:44 PM5/27/06
to
Hi John!!
I am not sure why this is not working. But have you tried this with
StringBuffer?

grasp...@yahoo.com

unread,
May 27, 2006, 10:18:17 PM5/27/06
to
Hi,

Martin Gerner's suggestion of using String.replace looks like it should
work. My bad for not looking at the api more closely.

Thanks!
John

Bernd Klier

unread,
May 29, 2006, 5:12:27 AM5/29/06
to
grasp...@yahoo.com wrote:
> Hi All,

Hi

>
> public class Ouch {
>
> public static void main(String[] args) throws Exception {
> String start = "yours now for just <amount>";
> String price = "$9.99";
> String end = start.replaceAll("<amount>", price);
> System.out.println(end);
> }
>
> }
>
> Exception in thread "main" java.lang.IndexOutOfBoundsException: No
> group 9

You have to escape the '$' character. Try
String price = "\\$9.99";
and it'll work for you.

HTH

Bernd

0 new messages