FULL PRODUCT VERSION :
java version "1.5.0_06"
Java(TM) 2 Runtime Environment, Standard Edition (build 1.5.0_06-b05)
Java HotSpot(TM) Client VM (build 1.5.0_06-b05, mixed mode, sharing)
ADDITIONAL OS VERSION INFORMATION :
Microsoft Windows XP [Version 5.1.2600]
A DESCRIPTION OF THE PROBLEM :
This code
public class Test1 {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
String str = "%id Data directory name: `%m' ";
String chr = "%m";
String msg = "F:\\projects\\eclipse_workspace\\fred_for_fixes\\data\\";
str = str.replaceFirst(chr, msg);
}
}
reproduces the problem. By using this line instead
String msg = "F:\\\\projects\\\\eclipse_workspace\\\\fred_for_fixes\\\\data\\\\";
we can circumvent the problem and get the proper behavior, however, I think this should not happen in the first place.
Cheers,
Nik
STEPS TO FOLLOW TO REPRODUCE THE PROBLEM :
Just run this:
public class Test1 {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
String str = "%id Data directory name: `%m' ";
String chr = "%m";
String msg = "F:\\projects\\eclipse_workspace\\fred_for_fixes\\data\\";
str = str.replaceFirst(chr, msg);
}
}
EXPECTED VERSUS ACTUAL BEHAVIOR :
EXPECTED -
str should have value
"
%id Data directory name: `F:\projects\eclipse_workspace\fred_for_fixes\data\'
"
ACTUAL -
Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 50
at java.lang.String.charAt(String.java:558)
at java.util.regex.Matcher.appendReplacement(Matcher.java:696)
at java.util.regex.Matcher.replaceFirst(Matcher.java:848)
at java.lang.String.replaceFirst(String.java:1967)
at Test1.main(Test1.java:13)
ERROR MESSAGES/STACK TRACES THAT OCCUR :
Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 50
at java.lang.String.charAt(String.java:558)
at java.util.regex.Matcher.appendReplacement(Matcher.java:696)
at java.util.regex.Matcher.replaceFirst(Matcher.java:848)
at java.lang.String.replaceFirst(String.java:1967)
at Test1.main(Test1.java:13)
REPRODUCIBILITY :
This bug can be reproduced always.
---------- BEGIN SOURCE ----------
public class Test1 {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
String str = "%id Data directory name: `%m' ";
String chr = "%m";
String msg = "F:\\projects\\eclipse_workspace\\fred_for_fixes\\data\\";
str = str.replaceFirst(chr, msg);
}
}
---------- END SOURCE ----------
CUSTOMER SUBMITTED WORKAROUND :
Use "\\\\" instead of "\\".