如何清理和打印\ d {3} \ d {3} \ d {2} \ d {2}格式的数字

时间:2019-04-08 22:04:35

标签: java regex string

使用正则表达式,我需要格式化一个字符串,该字符串包含数字,字母a-z和A-Z,同时还包含破折号和空格。

根据用户输入,我有 02-219 8 53 24

输出应为 022 198 53 24

我正在使用正则表达式

[^A-Za-z0-9\\s.]

和Java

String abc = "02-219 8 53 24";
String hello = abc.replaceAll("[^A-Za-z0-9\\s.]", " ");
System.out.println(hello.replaceAll("(\\S\\d{3})", ""));

结果 02 219 8 53 24

2 个答案:

答案 0 :(得分:1)

您可以使用

.replaceAll("\\D+", "").replaceFirst("^(\\d{3})(\\d{3})(\\d{2})(\\d{2})$", "$1 $2 $3 $4")

.replaceAll("\\D+", "")部分删除所有非数字字符(因此,所讨论的字符串becomes 0221985324),第二个replaceFirst("^(\\d{3})(\\d{3})(\\d{2})(\\d{2})$", "$1 $2 $3 $4")将数字分为几组并插入它们之间的空间。请参阅此步骤2中的this regex demo

Java demo

String abc = "02-219 8 53 24";
String hello = abc.replaceAll("\\D+", "");
System.out.println(hello.replaceFirst("^(\\d{3})(\\d{3})(\\d{2})(\\d{2})$", "$1 $2 $3 $4"));
// => 022 198 53 24

答案 1 :(得分:0)

您可以使用正则表达式通过\D删除非数字字符,但是不需要格式化输出字符串。为此,您可以直接使用String.format()方法或printf()

String input = "02-219 8 53 24";
Object[] charObjectArray = 
    input.replaceAll("\\D", "").chars().mapToObj(c -> (char)c).toArray(Character[]::new);
if(charObjectArray.length>=10)
    System.out.printf("%c%c%c %c%c%c %c%c %c%c%n", charObjectArray);
else
    System.out.println("Invalid input string");

输出:

022 198 53 24