String replaceAll() and regex question

G

grasp06110

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)
 
M

Martin Gerner

(e-mail address removed) wrote in 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)
 
M

Martin Gerner

(e-mail address removed) wrote in 38g2000cwa.googlegroups.com:


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)

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

Chris Smith

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

g.rajeshchowdary

Hi John!!
I am not sure why this is not working. But have you tried this with
StringBuffer?
 
G

grasp06110

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
 
B

Bernd Klier

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
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Similar Threads


Members online

No members online now.

Forum statistics

Threads
473,744
Messages
2,569,483
Members
44,901
Latest member
Noble71S45

Latest Threads

Top