/ / Sformatuj liczbę na podstawie podanego formatu - java, regex

Sformatuj liczbę na podstawie podanego formatu - java, regex

Próbuję sformatować dany numer telefonu komórkowego na dany format. Numer zostanie zapisany jako zwykły 10-cyfrowy numer w bazie danych i aby go pokazać w interfejsie użytkownika, muszę sformatować ten numer.

Używam JSTL, aby wyświetlić to po stronie JSP.Planowałem stworzyć niestandardową funkcję, która powinna akceptować numer telefonu komórkowego / numer telefonu i wymagany format i zwróci numer w wymaganym formacie, takim jak

(xxx) xxx-xxx xxx-xxx-xxx

Próbowałem podzielić dany numer telefonu na podstawie regExp, ale nie jestem pewien, jak to zrobić

String phoneNumber="1232345678";
Pattern pattern=Pattern.compile("\d{3}\d{3}\d{4}");
String [] s=pattern.split(phoneNumber);

Innym sposobem na podzielenie danego ciągu znaków i den można użyć konkatenacji, aby uzyskać pożądany format.

Jaki może być najlepszy sposób na osiągnięcie tego

Odpowiedzi:

2 dla odpowiedzi № 1

Potrzebujesz tylko jedna linia:

String output = phoneNumber.replaceAll("(\d{3})(\d{3})(\d{4})", "($1) $2-$3");

Ten kod wywołuje następujący efekt:

1232345678 --> (123) 234-5678


Morał jest następujący:

  • Użyj interfejsu API (zamiast pisać własny kod)
  • Nie komplikuj zbytnio rzeczy (gdy dostępne jest proste podejście, skorzystaj z niego)

0 dla odpowiedzi nr 2

Spójrz na rozwiązanie brutalnej siły:

Po prostu wpisz format, na przykład „(xxx) xxx-xxxx”, a kod zastąpi x cyframi z numeru telefonu.

public static String format(String number, String format) {
char[] arr = new char[format.length()];
int i = 0;
for (int j = 0; j < format.length(); j++) {
if (format.charAt(j) == "x")
arr[j] = number.charAt(i++);
else
arr[j] = format.charAt(j);
}

return new String(arr);
}