我必须拆分这个字符串:
00016282000079116050
Run Code Online (Sandbox Code Playgroud)
它有预定义的块.应该就是这样:
00016 282 00 0079 116 050
Run Code Online (Sandbox Code Playgroud)
我做了这个代码:
String unformatted = String.valueOf("00016282000079116050");
String str1 = unformatted.substring(0,5);
String str2 = unformatted.substring(5,8);
String str3 = unformatted.substring(8,10);
String str4 = unformatted.substring(10,14);
String str5 = unformatted.substring(14,17);
String str6 = unformatted.substring(17,20);
System.out.println(String.format("%s %s %s %s %s %s", str1, str2, str3, str4, str5, str6));
Run Code Online (Sandbox Code Playgroud)
它有效,但我需要使这段代码更具代表性/更漂亮.
使用Java 8流或正则表达式的东西应该是好的.有什么建议?
您可以使用正则表达式来编译Pattern包含6个组的组,例如
String unformatted = "00016282000079116050"; // <-- no need for String.valueOf
Pattern p = Pattern.compile("(\\d{5})(\\d{3})(\\d{2})(\\d{4})(\\d{3})(\\d{3})");
Matcher m = p.matcher(unformatted);
if (m.matches()) {
System.out.printf("%s %s %s %s %s %s", m.group(1), m.group(2), m.group(3),
m.group(4), m.group(5), m.group(6));
}
Run Code Online (Sandbox Code Playgroud)
产出(按要求)
00016 282 00 0079 116 050
Run Code Online (Sandbox Code Playgroud)
或者,正如评论中指出的那样,你可以使用Matcher.replaceAll(String)喜欢的
if (m.matches()) {
System.out.println(m.replaceAll("$1 $2 $3 $4 $5 $6"));
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
131 次 |
| 最近记录: |