Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/309.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/rest/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java如何格式化字符串?_Java_String Formatting - Fatal编程技术网

Java如何格式化字符串?

Java如何格式化字符串?,java,string-formatting,Java,String Formatting,我有以下字符串: String x = "020120765"; 我希望此字符串的格式为02 0120765。一种可能性是: x = x.substring(0,2) + " " + x.substring(2, x.length()); 或: 还有其他更好或优雅的方式吗?我正朝着正则表达式的方向思考。我尝试了以下方法: x = String.format("%s %s", x.split("\\d{2}")); 但它不起作用 另一种选择 x = x.replaceAll("(..)(.+

我有以下字符串:

String x = "020120765";
我希望此字符串的格式为
02 0120765
。一种可能性是:

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

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

x = String.format("%s %s", x.split("\\d{2}"));
但它不起作用

另一种选择

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

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

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

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

您还可以使用
StringBuilder
及其方法:


x=String.format(“%s%s”,x.split((?
x.replaceAll)()您可以省略
x.length()
作为
substring
的第二个参数,只需写入
x.substring(2)
+1这似乎是最简单、最直接的解决方案。+1.位置会发生变化,因此我只需要在与正则表达式匹配时插入空格。否则,默认字符串应该是值。我不是向下投票人,但
拆分(\\d{2}”)
将删除与
\\d{2}匹配的部分
这似乎不是OP想要的。我复制OP的正则表达式时出错了。给我几分钟时间,我会修复它。请查看编辑。正则表达式模式现在是正确的,并且已经过测试=)很好。我改为:
x.replaceFirst(\\d{2})(\\d+),“$1$2”)
。我怎么会看不到呢。谢谢。在我看来,这是解决这个问题最直接的方法。
x = x.replaceAll("^..", "$0 ")
x = new StringBuilder(x).insert(2, ' ').toString();
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]);
x.replaceAll("(?<=^..)", " ");