JDK-6950971 : String.replaceAll is buggy
  • Type: Bug
  • Component: core-libs
  • Sub-Component: java.lang
  • Affected Version: 6u10
  • Priority: P4
  • Status: Closed
  • Resolution: Duplicate
  • OS: windows_xp
  • CPU: x86
  • Submitted: 2010-05-09
  • Updated: 2012-09-06
  • Resolved: 2012-01-16
Related Reports
Duplicate :  
Description
FULL PRODUCT VERSION :


ADDITIONAL OS VERSION INFORMATION :
On Windows and Mac OS X and probably everywhere...

Windows
=======
* Windows XP Professional, Service Pack 3
$ java -version
java version "1.6.0_20"
Java(TM) SE Runtime Environment (build 1.6.0_20-b02)
Java HotSpot(TM) Client VM (build 16.3-b01, mixed mode, sharing)

Mac OS X
========
* Darwin plasma.lan 9.8.0 Darwin Kernel Version 9.8.0: Wed Jul 15 16:55:01 PDT 2009; root:xnu-1228.15.4~1/RELEASE_I386 i386
java -version
java version "1.6.0_17"
Java(TM) SE Runtime Environment (build 1.6.0_17-b04-248-9M3125)
Java HotSpot(TM) 64-Bit Server VM (build 14.3-b01-101, mixed mode)


A DESCRIPTION OF THE PROBLEM :
Complete example here:

package se.storm.opapi;

public class TestBugReplaceAll {

    public final static void main(String[] args) {
        System.out.println("gobbledegook".replaceAll("oo", "\\"));
    }

}

/*
[info] Running se.storm.opapi.TestBugReplaceAll
java.lang.StringIndexOutOfBoundsException: String index out of range: 1
	at java.lang.String.charAt(String.java:686)
	at java.util.regex.Matcher.appendReplacement(Matcher.java:703)
	at java.util.regex.Matcher.replaceAll(Matcher.java:813)
	at java.lang.String.replaceAll(String.java:2189)
	at se.storm.opapi.TestBugReplaceAll.main(TestBugReplaceAll.java:6)
*/

STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
See Descr. above

EXPECTED VERSUS ACTUAL BEHAVIOR :
EXPECTED -
should replace all "oo" with "\", i.e. replace all occurances of double o with a single backslash character.
ACTUAL -
throws java.lang.StringIndexOutOfBoundsException: String index out of range: 1
see desc above.

ERROR MESSAGES/STACK TRACES THAT OCCUR :
java.lang.StringIndexOutOfBoundsException: String index out of range: 1
	at java.lang.String.charAt(String.java:686)
	at java.util.regex.Matcher.appendReplacement(Matcher.java:703)
	at java.util.regex.Matcher.replaceAll(Matcher.java:813)
	at java.lang.String.replaceAll(String.java:2189)
	at se.storm.opapi.TestBugReplaceAll.main(TestBugReplaceAll.java:6)

REPRODUCIBILITY :
This bug can be reproduced always.

---------- BEGIN SOURCE ----------
package se.storm.opapi;

public class TestBugReplaceAll {

    public final static void main(String[] args) {
        System.out.println("gobbledegook".replaceAll("oo", "\\"));
    }

}

/*
[info] Running se.storm.opapi.TestBugReplaceAll
java.lang.StringIndexOutOfBoundsException: String index out of range: 1
	at java.lang.String.charAt(String.java:686)
	at java.util.regex.Matcher.appendReplacement(Matcher.java:703)
	at java.util.regex.Matcher.replaceAll(Matcher.java:813)
	at java.lang.String.replaceAll(String.java:2189)
	at se.storm.opapi.TestBugReplaceAll.main(TestBugReplaceAll.java:6)
*/
---------- END SOURCE ----------

CUSTOMER SUBMITTED WORKAROUND :
unknown.