Reuse Pattern instance to improve performance

To improve the performance, explicitly compile the regular expression
into a Pattern instance (which is immutable) as part of class
initialization, cache it, and reuse the same instance for every
invocation.

Bug: 325342963
Test: atest IwlanTests
(cherry picked from https://googleplex-android-review.googlesource.com/q/commit:a3dd84ad72786d8767d6b988f46a468404e117cd)
Merged-In: Icaed3cfbfad3b47ea3230ce3c638b32d33914a90
Change-Id: Icaed3cfbfad3b47ea3230ce3c638b32d33914a90
diff --git a/src/com/google/android/iwlan/epdg/EpdgSelector.java b/src/com/google/android/iwlan/epdg/EpdgSelector.java
index 3db6ac2..3590a7e 100644
--- a/src/com/google/android/iwlan/epdg/EpdgSelector.java
+++ b/src/com/google/android/iwlan/epdg/EpdgSelector.java
@@ -68,6 +68,7 @@
 import java.util.concurrent.ThreadPoolExecutor;
 import java.util.concurrent.TimeUnit;
 import java.util.concurrent.TimeoutException;
+import java.util.regex.Pattern;
 import java.util.stream.Collectors;
 
 public class EpdgSelector {
@@ -101,6 +102,7 @@
     private static final int PCO_IPV6_LEN = 16; // 16 bytes for IPv6 address in PCO data.
 
     private static final String NO_DOMAIN = "NO_DOMAIN";
+    private static final Pattern PLMN_PATTERN = Pattern.compile("\\d{5,6}");
 
     BlockingQueue<Runnable> dnsResolutionQueue;
 
@@ -1388,6 +1390,6 @@
      * @return True if the PLMN identifier is valid, false otherwise.
      */
     private static boolean isValidPlmn(String plmn) {
-        return plmn != null && plmn.matches("\\d{5,6}");
+        return plmn != null && PLMN_PATTERN.matcher(plmn).matches();
     }
 }