Home | Contact Us | FAQ | Search & Site Map | Link to Us
Sign In | Join | Other 45 Sites in Network
HomeAnnouncementsWhite Papers
Discussion GroupsFirst AidDatabasesJavaBeansGUIJava 3DVirtual MachineCORBASecurityToolsGeneral
Java DirectoryOpen Source ProjectsSample Book ChaptersUser GroupsWeb Resources
Related Topics
Databases.NETMore Topics ...

Java Forum / General / May 2006

Tip: Looking for answers? Try searching our database.

String replaceAll() and regex question

Thread view: 
grasp06110@yahoo.com - 28 May 2006 00:39 GMT
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


Free Magazines

Get these publications absolutely FREE for up to 12 months. There are no hidden fees and no obligation. Simply choose a title, complete the application form and submit it. Read more ...

Oracle MagazineNetwork ComputingComputer WorldBio-IT WorldeWeekInformation WeekInfosecurity
 
Sign In
Join
My Latest Posts
My Monitored Threads
My Blog
My Photo Gallery
My Profile
My Homepage

Start New Thread
Enable EMail Alerts
Rate this Thread



©2008 Advenet LLC   Privacy Policy - Terms of Use
This website includes both content owned or controlled by Advenet as well as content owned or controlled by third parties.