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 - 28 May 2006 01:32 GMT
grasp06110@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)

Signature
Martin Gerner
Martin Gerner - 28 May 2006 01:33 GMT
> grasp06110@yahoo.com wrote in news:1148773195.171205.166250@
> 38g2000cwa.googlegroups.com:
[quoted text clipped - 9 lines]
> http://java.sun.com/j2se/1.5.0/docs/api/java/lang/String.html#replace
> (char,%20char)
Hm, the link got bogged up. Well, just scroll down until you get on
replace.

Signature
Martin Gerner
grasp06110@yahoo.com - 28 May 2006 03:18 GMT
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
Chris Smith - 28 May 2006 01:43 GMT
> 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.

Signature
www.designacourse.com
The Easiest Way To Train Anyone... Anywhere.
Chris Smith - Lead Software Developer/Technical Trainer
MindIQ Corporation
g.rajeshchowdary@gmail.com - 28 May 2006 02:03 GMT
Hi John!!
I am not sure why this is not working. But have you tried this with
StringBuffer?
> Hi All,
>
[quoted text clipped - 31 lines]
> at java.lang.String.replaceAll(String.java:2000)
> at Ouch.main(Ouch.java:7)
Bernd Klier - 29 May 2006 10:12 GMT
> Hi All,
Hi
> public class Ouch {
>
[quoted text clipped - 9 lines]
> 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