Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- import java.util.regex.*;
- import java.io.*;
- class RegCheck {
- public static void main(String args[]) throws IOException {
- BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
- String userDefinedPattern = "9.[1,4]...[5-8]..."; //br.readLine();
- System.out.println(userDefinedPattern);
- String phoneNumber = br.readLine();
- //the following line assumes a three character ISD code (e.g. +91), hence the substring trimmer is there.
- //input the 10 digit phone number along with the ISD code. For example: +919876543210
- //note that, userDefinedPattern is just a 10 digit number
- phoneNumber = phoneNumber.substring(3, phoneNumber.length());
- System.out.println("Number at input is: " + phoneNumber);
- int numDigits = 10;
- boolean blockThisNumber = true;
- boolean[] checker = new boolean[numDigits];
- for(int i = 0; i < numDigits; i++) checker[i] = false;
- for(int i = 0, j = 0; i < phoneNumber.length() && j < userDefinedPattern.length(); i++) {
- char c = phoneNumber.charAt(i);
- int p = Character.getNumericValue(c);
- //System.out.println(p + " " + userDefinedPattern.charAt(j));
- //Case 1: u is a digit, then check if it is equal to p
- if(Character.isDigit(userDefinedPattern.charAt(j))) {
- if(p == Character.getNumericValue(userDefinedPattern.charAt(j))) {
- checker[i] = true;
- j++;
- continue;
- }
- else {
- j++;
- continue;
- }
- }
- //Case 2: u is a dot, then no checking just continue
- if(userDefinedPattern.charAt(j) == '.') {
- checker[i] = true;
- j++;
- continue;
- }
- //Case 3: u is a range specified by [a-b] where a, b are digits
- if(userDefinedPattern.charAt(j) == '[' && userDefinedPattern.charAt(j + 2) == '-') {
- //find the next character to [ and name it a,
- //skip the '-', read the next character, name it b
- //check for boundary matchings, manipulate j accordingly
- int a = Character.getNumericValue(userDefinedPattern.charAt(j + 1));
- int b = Character.getNumericValue(userDefinedPattern.charAt(j + 3));
- if(p >= a && p <= b) {
- checker[i] = true;
- j = j + 5;
- continue;
- }
- else {
- j = j + 5;
- continue;
- }
- }
- //Case 4: u is a set of digits
- if(userDefinedPattern.charAt(j) == '[' && userDefinedPattern.charAt(j + 2) == ',') {
- while(userDefinedPattern.charAt(j) != ']') {
- if(Character.isDigit(userDefinedPattern.charAt(j))) {
- if(p == Character.getNumericValue(userDefinedPattern.charAt(j))) {
- checker[i] = true;
- break;
- }
- }
- else j++;
- }
- //j reached ']', so increment it
- j++;
- }
- }
- for(int i = 0; i < numDigits; i++) blockThisNumber &= checker[i];
- System.out.println((blockThisNumber ? "Call Blocked!" : "Calling..."));
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement