Java如何格式化字符串?

时间:2014-04-24 11:58:04

标签: java string-formatting

我有以下字符串:

String x = "020120765";

我希望此字符串采用02 0120765的形式。一种可能性是:

x = x.substring(0,2) + " " + x.substring(2, x.length());

或:

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

还有其他更好或更优雅的方式吗?我正在思考正则表达式的方向。我尝试过以下方法:

x = String.format("%s %s", x.split("\\d{2}"));

但它不起作用。

5 个答案:

答案 0 :(得分:8)

您还可以使用StringBuilder insert方法:

x = new StringBuilder(x).insert(2, ' ').toString();

答案 1 :(得分:5)

另一个选择

x = x.replaceAll("(..)(.+)", "$1 $2");

答案 2 :(得分:2)

如果您对正则表达式解决方案感兴趣,那么您可以尝试使用

x = x.replaceAll("^..", "$0 ")

^..将匹配前两个字符。 $0是对来自群组0(包含整个匹配)的匹配的引用,因此$0会将匹配的部分替换为自身加空格。

答案 3 :(得分:0)

x=String.format("%s %s",x.split("(?<=\\G.{2})", 2))

将无法正常工作,因为您尝试传入数组并且参数太少。但是,您可以这样做:

x=String.format("%s %s",x.split("(?<=\\G.{2})", 2)[0], x.split("(?<=\\G.{2})", 2)[1]);

或者,更整洁,

String[] arr = x.split("(?<=\\G.{2})", 2);
x = String.format("%s %s", arr[0], arr[1]);

编辑:我对正则表达式非常缺乏经验,请原谅以前不正确的正则表达式模式。

答案 4 :(得分:0)

x.replaceAll("(?<=^..)", " ");