To cover all cases I would suggest following impl:
private static BigDecimal convertToBigDecimal(String s) {
StringBuilder sb = new StringBuilder();
if (s.indexOf('.') != -1 && s.indexOf(',') != -1) {
s = s.replace(',', '.');
String[] ss = s.split("\\.");
for (int i = 0; i < ss.length; i++) {
if (i > 0 && i == ss.length - 1) {
sb.append('.');
}
sb.append(ss[i]);
}
} else if (s.indexOf('.') != -1) {
String[] ss = s.split("\\.");
if (ss.length > 2) {
sb.append(s.replace(".", ""));
} else {
// assume it is decimal delimiter
sb.append(ss[0]).append('.').append(ss[1]);
}
} else if (s.indexOf(',') != -1) {
String[] ss = s.split(",");
if (ss.length > 2) {
sb.append(s.replace(",", ""));
} else {
// assume it is decimal delimiter
sb.append(ss[0]).append('.').append(ss[1]);
}
}
BigDecimal bd = new BigDecimal(sb.toString());
return bd;
}
The ideas is first check if we have both than we definitely have decimal part and we replace all ,
to .
and then skip all .
except last one. Otherwise if we have several same delimiters it is number without decimal part. In other case we need to know pattern to distinguish with decimal or not. For sample numbers we assume it is with decimal.