我很擅长将正则表达式用作java中的泛型方法。我对如何使用正则表达式作为Java中的泛型方法感到困惑。
通常正则表达式将采用String类型,但我需要它将接受所有数据类型,如int
,double
,float
.....
下面是我的代码,它根据正则表达式和给定数据返回true
或false
值。
但我的问题是它只对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");
}
}
}
提前致谢!
答案 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()
也会这样做。
然而Integer
,Double
等具有更严格的模式。 valueOf
也是与语言环境无关的:没有千位分隔符,没有小数点逗号。这可能意味着在获得int
之前的原始条目有自己的验证格式。