猿问

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

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

从用户输入我有02-219 8 53 24

输出应为022 198 53 24

我正在使用正则表达式

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

和爪哇

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


慕容森
浏览 181回答 2
2回答

慕姐4208626

您可以使用.replaceAll("\\D+", "").replaceFirst("^(\\d{3})(\\d{3})(\\d{2})(\\d{2})$", "$1 $2 $3 $4")该部分删除所有非数字字符(因此,有问题的字符串变为 ),第二部分将数字拆分为组并在它们之间插入空格。请参阅此步骤 2 的正则表达式演示。.replaceAll("\\D+", "")0221985324replaceFirst("^(\\d{3})(\\d{3})(\\d{2})(\\d{2})$", "$1 $2 $3 $4")爪哇演示: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

心有法竹

您可以使用正则表达式通过删除非数字字符,但不需要它来格式化输出字符串。为此,您可以直接使用字符串格式()方法或 printf()\DString 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
随时随地看视频慕课网APP

相关分类

Java
我要回答