因为人们可能还会访问这里,并且在基准测试之后会对Regex产生偏见.因此,我将给出基准测试的更新版本,以及Regex的编译版本。与以前的基准测试相反,这个测试显示Regex解决方案实际上一直具有良好的性能。
复制自“蜥蜴比尔”并以编译版本更新:private final Pattern pattern = Pattern.compile("^-?\\d+$");public void runTests() {
String big_int = "1234567890";
String non_int = "1234XY7890";
long startTime = System.currentTimeMillis();
for(int i = 0; i
IsInt_ByException(big_int);
long endTime = System.currentTimeMillis();
System.out.print("ByException - integer data: ");
System.out.println(endTime - startTime);
startTime = System.currentTimeMillis();
for(int i = 0; i
IsInt_ByException(non_int);
endTime = System.currentTimeMillis();
System.out.print("ByException - non-integer data: ");
System.out.println(endTime - startTime);
startTime = System.currentTimeMillis();
for(int i = 0; i
IsInt_ByRegex(big_int);
endTime = System.currentTimeMillis();
System.out.print("\nByRegex - integer data: ");
System.out.println(endTime - startTime);
startTime = System.currentTimeMillis();
for(int i = 0; i
IsInt_ByRegex(non_int);
endTime = System.currentTimeMillis();
System.out.print("ByRegex - non-integer data: ");
System.out.println(endTime - startTime);
startTime = System.currentTimeMillis();
for (int i = 0; i
IsInt_ByCompiledRegex(big_int);
endTime = System.currentTimeMillis();
System.out.print("\nByCompiledRegex - integer data: ");
System.out.println(endTime - startTime);
startTime = System.currentTimeMillis();
for (int i = 0; i
IsInt_ByCompiledRegex(non_int);
endTime = System.currentTimeMillis();
System.out.print("ByCompiledRegex - non-integer data: ");
System.out.println(endTime - startTime);
startTime = System.currentTimeMillis();
for(int i = 0; i
IsInt_ByJonas(big_int);
endTime = System.currentTimeMillis();
System.out.print("\nByJonas - integer data: ");
System.out.println(endTime - startTime);
startTime = System.currentTimeMillis();
for(int i = 0; i
IsInt_ByJonas(non_int);
endTime = System.currentTimeMillis();
System.out.print("ByJonas - non-integer data: ");
System.out.println(endTime - startTime);}private boolean IsInt_ByException(String str){
try
{
Integer.parseInt(str);
return true;
}
catch(NumberFormatException nfe)
{
return false;
}}private boolean IsInt_ByRegex(String str){
return str.matches("^-?\\d+$");}private boolean IsInt_ByCompiledRegex(String str) {
return pattern.matcher(str).find();}public boolean IsInt_ByJonas(String str){
if (str == null) {
return false;
}
int length = str.length();
if (length == 0) {
return false;
}
int i = 0;
if (str.charAt(0) == '-') {
if (length == 1) {
return false;
}
i = 1;
}
for (; i
char c = str.charAt(i);
if (c <= '/' || c >= ':') {
return false;
}
}
return true;}
结果:ByException - integer data: 45ByException - non-integer data: 465ByRegex - integer data: 272ByRegex - non-integer data: 131ByCompiledRegex - integer data: 45ByCompiledRegex - non-integer data: 26ByJonas - integer data: 8ByJonas - non-integer data: 2