-1

指定された数値に基づいてマスクを計算する一連のルールを定義しようとしています。たとえば、12、13、14 で始まる任意の数字の 8472952424 のマスクを返そうとしています。または、7 または 8 で始まる任意の数字に対して 847235XXXX を返します。

入力数値は 4 桁の整数で、戻り値は文字列です。正規表現を実行する前に整数を文字列に変換する必要がありますか? また、式を作成する方法もわかりません。

編集 ケースごとに個別の if ステートメントを使用して行うには、基準が多すぎます。内線番号をマスクと照合して、Cisco CallManager データベースに正しく挿入できるようにしています (興味がある場合)。

編集

これは私がケースの1つに対して行ったことですが、これはまだ正しく一致していません:

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;
}
4

1 に答える 1

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]
于 2013-06-25T15:48:40.250 に答える