2013-06-25 3 views
-1

Я пытаюсь определить набор правил, которые будут вычислять маску на основе числа, которое оно задано. Например, я пытаюсь вернуть маску 8472952424 любого числа, начинающегося с 12, 13, 14, или вернуть 847235XXXX для любого числа, которое начинается с 7 или 8.Использование регулярного выражения для определения масок для чисел в Java

Номера ввода 4-значные целые числа и возврат является строкой. Нужно ли преобразовывать целые числа в строку, прежде чем я буду использовать регулярное выражение, и я также не уверен, как создавать выражения.

Редактировать У меня слишком много критериев, которые можно выполнить с помощью отдельных операторов if для каждого случая. Я соответствующие добавочные номера для масок, так что может быть вставлена ​​правильно на базе Cisco CallManager (в случае, если вам интересно)

Edit

Это то, что я сделал для одного из случаев, но это по-прежнему не правильно соответствие:

public String lookupMask(int ext){ 
    //convert to String 
    StringBuilder sb = new StringBuilder(); 
    sb.append(ext); 
    String extString = sb.toString(); 

    //compile and match pattern 
    Pattern p = Pattern.compile("^[12|13|14|15|17|19|42]"); 
    Matcher m = p.matcher(extString); 
    if(m.matches()){ 
     return "8472952424"; 
    } 
    return null; 
} 
+1

Да вам нужно преобразовать в 'String' – Reimeus

+0

http://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html – nachokk

+0

Я не» t знать, нужно ли преобразовать их в 'String'. Четырехзначное целое число, начинающееся с 12, 13 или 14, будет «1200 <= x && x <= 1499', правильно? Трудно точно сказать, что вы пытаетесь сделать, и как (и почему) вы создаете свои маски. И почему вы думаете, что regex будет лучшим вариантом (хотя, если вам нужны регулярные выражения для этого, то да, вам нужно преобразовать в 'String'). – iamnotmaynard

ответ

1

с примером Pattern может быть такой:

package test; 

import java.util.ArrayList; 
import java.util.List; 
import java.util.regex.Pattern; 

public class Main { 
    // working Pattern 
    private static final Pattern PATTERN = Pattern.compile("^((1[234579])|42)"); 
    // Your Pattern won't work because although it takes in account the start of the 
    // input, the OR within a character class does not exempt you to write round brackets 
    // around sequential characters such as "12". 
    // In fact here, the OR will be interpreted as the "|" character in the class, thus 
    // allowing it as a start character. 
    private static final Pattern NON_WORKING_PATTERN = Pattern.compile("^[12|13|14|15|17|19|42]"); 
    private static final String STARTS_WITH_1_234 = "8472952424"; 
    private static final String STARTS_WITH_ANYTHING_ELSE = "847295XXXX"; 

    public static void main(String[] args) { 
     // NON_WORKING_PATTERN "works" on "33333" 
     System.out.println(NON_WORKING_PATTERN.matcher("33333").find()); 
     int[] testIntegers = new int[]{1200, 1300, 1400, 1500, 1700, 1900, 4200, 0000}; 
     List<String> results = new ArrayList<String>(); 
     for (int test: testIntegers) { 
      if (PATTERN.matcher(String.valueOf(test)).find()) { 
       results.add(STARTS_WITH_1_234); 
      } 
      else { 
       results.add(STARTS_WITH_ANYTHING_ELSE); 
      } 
     } 
     System.out.println(results); 
    } 
} 

Выход:

true 
[8472952424, 8472952424, 8472952424, 8472952424, 8472952424, 8472952424, 8472952424, 847295XXXX] 
+0

Спасибо, это работает! как я могу проверить правильность моего регулярного выражения, есть ли у него веб-инструмент? У меня все еще есть другие случаи, которые я хочу проверить – laitha0

+0

@ user2247823. Есть несколько веб-приложений для веб-приложений Java и не Java-регексов онлайн, просто Google, и вы найдете много. В конечном счете моя личная библия является официальной страницей [Java SE 1.4.2 Pattern] (http://docs.oracle.com/javase/1.4.2/docs/api/java/util/regex/Pattern.html) – Mena