89

I have a String called persons.name

I want to replace the DOT . with /*/ i.e my output will be persons/*/name

I tried this code:

String a="\\*\\";
str=xpath.replaceAll("\\.", a);

I am getting StringIndexOutOfBoundsException.

How do I replace the dot?

Eric Leschinski
  • 146,994
  • 96
  • 417
  • 335
soumitra chatterjee
  • 2,268
  • 9
  • 26
  • 48
  • I know that's an old question, but ad advice for everyone getting here: please, stop using replaceAll where you do not have to deal with regex. "replaceAll" doesn't mean "replace all occurrencies", in Java libraries. – Andrea Feb 17 '23 at 10:45

4 Answers4

157

You need two backslashes before the dot, one to escape the slash so it gets through, and the other to escape the dot so it becomes literal. Forward slashes and asterisk are treated literal.

str=xpath.replaceAll("\\.", "/*/");          //replaces a literal . with /*/

http://docs.oracle.com/javase/7/docs/api/java/lang/String.html#replaceAll(java.lang.String,%20java.lang.String)

Eric Leschinski
  • 146,994
  • 96
  • 417
  • 335
Femi
  • 64,273
  • 8
  • 118
  • 148
18

If you want to replace a simple string and you don't need the abilities of regular expressions, you can just use replace, not replaceAll.

replace replaces each matching substring but does not interpret its argument as a regular expression.

str = xpath.replace(".", "/*/");
khelwood
  • 55,782
  • 14
  • 81
  • 108
9

Use Apache Commons Lang:

String a= "\\*\\";
str = StringUtils.replace(xpath, ".", a);

or with standalone JDK:

String a = "\\*\\"; // or: String a = "/*/";
String replacement = Matcher.quoteReplacement(a);
String searchString = Pattern.quote(".");
String str = xpath.replaceAll(searchString, replacement);
palacsint
  • 28,416
  • 10
  • 82
  • 109
-2

return sentence.replaceAll("\s",".");