非常基本的问题,但很难进入可接受的形式:
我想通过每3个空格插入一个填充来转换字符串,如
“123456789” - > “123 456 789”
“abcdefgh” - > “abc def gh”
我的代码目前是
public String toSpaceSeparatedString(String s) {
if (s == null || s.length() < 3) {
return s;
}
StringBuilder builder = new StringBuilder();
int i;
for (i = 0; i < s.length()-3; i += 3) {
builder.append(s.substring(i, i+3));
builder.append(" ");
}
builder.append(s.substring(i, s.length()));
return builder.toString();
}
任何人都可以提供更优雅的解决方案吗?
答案 0 :(得分:10)
您可以使用正则表达式执行此操作:
"abcdefgh".replaceAll(".{3}", "$0 ")
答案 1 :(得分:3)
您可以这样使用printf
或String.format
:
builder.append(String.format("%4s", threeDigitString));
有关格式化输出/字符串in the API的更多信息。
答案 2 :(得分:1)
如果已有空格,则不会放置空格:
"abcdef gh".replaceAll("\\s*(..[^ ])\\s*", "$1 "); // --> "abc def gh"
答案 3 :(得分:1)
replaceAll
看起来是最好的,但是如果你考虑像12345这样的数字它将被转换为123 45.但在数字中我认为它应该是12 345