更好的方式(更优雅)将字符添加到字符串

时间:2014-03-19 11:48:57

标签: java formatting substring

我有String 8890,我希望转换为88,90。 这有更优雅的方式吗?

    String s = "8890";
    s = s.substring(0, s.length() - 2) + "," + s.substring(s.length() - 2);
    System.out.println(s);

3 个答案:

答案 0 :(得分:5)

也许这对你来说更优雅

StringBuilder sb = new StringBuilder("8890");
sb.insert(2, ',');
System.out.println(sb);

答案 1 :(得分:1)

看起来你正在尝试格式化十进制数字,为什么不这样做呢?

public static void main(String[] args) throws Exception {
    final String s = "8890";
    final BigDecimal dec = new BigDecimal(s).divide(BigDecimal.valueOf(100));
    final String formatted = new DecimalFormat("0.00", DecimalFormatSymbols.getInstance(Locale.FRENCH)).format(dec);
    System.out.println(formatted);
}

只需选择一个Locale小数点分隔符即可 - 我选择了French

输出:

88,90

或者在默认实例上设置setMinimumFractionDigits

final NumberFormat format = NumberFormat.getInstance(Locale.FRENCH);
format.setMinimumFractionDigits(2);
final String formatted = format.format(dec);

结果是一样的。

修改

OP的评论这是欧元格式。在这种情况下,存在一个完全相同的现有格式化程序:

public static void main(String[] args) throws Exception {
    final String s = "8890";
    final BigDecimal dec = new BigDecimal(s).divide(BigDecimal.valueOf(100));
    final String formatted = DecimalFormat.getCurrencyInstance(Locale.FRANCE).format(dec);
    System.out.println(formatted);
}

将输出:

88,90 €

选择一个他们使用领先的€的国家,例如意大利,将导致:

€ 88,90

答案 2 :(得分:0)

s = String.format("%s,%s", s.substring(0, 2), s.substring(2));