Как чистить и печатать цифры в формате \ d {3} \ d {3} \ d {2} \ d {2} - PullRequest
2 голосов
/ 09 апреля 2019

Используя Regex, мне нужно отформатировать строку, которая содержит цифры, буквы 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 ]

1 голос
/ 09 апреля 2019

Вы можете использовать

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

Часть .replaceAll("\\D+", "") удаляет все нецифровые символы (поэтому рассматриваемая строка становится 0221985324), а вторая replaceFirst("^(\\d{3})(\\d{3})(\\d{2})(\\d{2})$", "$1 $2 $3 $4") разбивает число на группы и вставляет пробелы между ними. См. это демонстрационное выражение этого шага 2.

Java-демонстрация :

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
0 голосов
/ 09 апреля 2019

Вы можете использовать регулярное выражение для удаления нецифрового символа с помощью \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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...