Как насчет использования потоков:
static String swapChars(String str, String c1, String c2)
{
return Stream.of(str.split(c1, -1))
.map (elem -> elem.replace(c2, c1))
.collect(Collectors.joining(c2));
}
Тест:
for(String s : new String[] {"12,345.6789", "12.345,6789", ".", "1." ,"1,"})
System.out.format("%s -> %s%n", s, swapChars(s, ",", ".") );
Вывод:
12,345.6789 -> 12.345,6789
12.345,6789 -> 12,345.6789
. -> ,
1. -> 1,
1, -> 1.