在Java中的通用方法中使用正则表达式

时间:2015-07-20 10:05:18

标签: java regex generics

我很擅长将正则表达式用作java中的泛型方法。我对如何使用正则表达式作为Java中的泛型方法感到困惑。 通常正则表达式将采用String类型,但我需要它将接受所有数据类型,如intdoublefloat ..... 下面是我的代码,它根据正则表达式和给定数据返回truefalse值。 但我的问题是它只对String值有效。我需要它在Int格式(如通用方法)。

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class StringValidator {
public boolean stringMultiFormat(String str, String regex) {
    boolean isValid = false;
    CharSequence inputStr = str;
    // Make the comparison case-insensitive.
    Pattern pattern = Pattern.compile(regex, Pattern.CASE_INSENSITIVE);
    Matcher matcher = pattern.matcher(inputStr);

    if (matcher.matches()) {
        isValid = true;
        System.out.println(isValid);
    } else {
        System.out.println(isValid);
    }
    return isValid;
}

public static void main(String[] args) {
    StringValidator aiov = new StringValidator();

    String num = "^\\s*(?:\\+?(\\d{1,3}))?([-. (]*(\\d{3})[-. )]*)?((\\d{3})[-. ]*(\\d{2,4})(?:[-.x ]*(\\d+))?)\\s*$";

    if (aiov.stringMultiFormat("(650)-055-2345", num)) {
        System.out.println("Given number is Valid Mobile Number");
    } else {
        System.out.println("Given number is Invalid Mobile Number");
    }

}
}

提前致谢!

3 个答案:

答案 0 :(得分:1)

有两种方法可以让stringMultiFormat接受多种格式。第一种是将输入参数从String更改为Object。在Java中,所有类都继承自Object,这意味着Object参数可以接受许多类输入。然后,您可以使用强制转换,例如

public boolean stringMultiFormat(Object var, String regex) {
    if (var instanceof String)
    { String str = (String) var; }
}

或者,您可以使用方法overloading

答案 1 :(得分:0)

如果你想检查一个整数是否与给定的正则表达式匹配,你可以convert it to a String

int test = 12345;
String testAsString = String.valueOf(test);
if (aiov.stringMultiFormat(testAsString, regex)) {

}

顺便说一句,这与Generics无关。

答案 2 :(得分:0)

理论上,您可以使用Object或泛型类型,如下所示:

public boolean objectMultiFormat(Object value, String regex) {
    return value == null ? false 
         : aiov.stringMultiFormat(String.valueOf(value), regex));
}

上面因为空案例,即使value.toString()也会这样做。

然而IntegerDouble等具有更严格的模式。 valueOf也是与语言环境无关的:没有千位分隔符,没有小数点逗号。这可能意味着在获得int之前的原始条目有自己的验证格式。