public class LocalizedFloatParser {
public static double toFloat(String input) {
String str = input;
int commaCount = countOccurrences(str, ',');
int dotCount = countOccurrences(str, '.');
int lastComma = str.lastIndexOf(',');
int lastDot = str.lastIndexOf('.');
if (commaCount > 0 && dotCount > 0) {
if (lastComma > lastDot) {
str = str.replace(".", "");
str = str.replace(",", ".");
} else {
str = str.replace(",", "");
}
} else if (commaCount > 0) {
str = str.replace(".", "");
str = str.replace(",", ".");
} else {
str = str.replace(",", "");
}
return Double.parseDouble(str);
}
private static int countOccurrences(String str, char ch) {
int count = 0;
for (char c : str.toCharArray()) {
if (c == ch) count++;
}
return count;
}
public static void main(String[] args) {
System.out.printf("%.3f%n", toFloat("1,224,533.533"));
System.out.printf("%.3f%n", toFloat("1.224.533,533"));
System.out.printf("%.2f%n", toFloat("2.354,67"));
System.out.printf("%.2f%n", toFloat("2,354.67"));
}
}
/*
run:
1224533.533
1224533.533
2354.67
2354.67
*/