This isn't as complicated as it seems. Using Pattern, Matcher and a few regular expression groups, it's just a few lines of code:
Pattern re = Pattern.compile("^([^-]+)-(.)(.*)$");
Matcher m = re.matcher("product-code");
if (m.matches())
{
// Could do: s = m.group(1) + m.group(2).toUpperCase() + m.group(3)
// Using a StringBuilder is more efficient, though.
StringBuilder buf = new StringBuilder();
buf.append(m.group(1));
buf.append(m.group(2).toUpperCase());
buf.append(m.group(3));
System.out.println(buf.toString());
}
Turning this into a general function or method is left as an exercise to the reader. ;-)
EDIT
Handling multiple matches:
String s = "product-code boo-yah";
Pattern re = Pattern.compile("^([^-]+)-(.)(.*)$");
Matcher m = re.matcher(s);
while (m.matches())
{
s = m.group(1) + m.group(2).toUpperCase() + m.group(3);
m = re.matcher(s);
}
System.out.println(s);
NOTE: I did test that code.