使用正则表达式,我需要格式化一个字符串,该字符串包含数字,字母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
答案 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。
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