using System;
using System.Text.RegularExpressions;
public class IsNumeric {
private static void Main(string[] args) {
int iterations = 10000000;
bool makeSureTheJitDoesNotOptimizeMeOut = false;
string[] testStrings = new string[] { "1234M", "12345" };
Console.WriteLine("IsNumber String 1: {0}", IsNumber(testStrings[0]));
Console.WriteLine("IsNumber String 2: {0}", IsNumber(testStrings[1]));
Console.WriteLine("IsDigit String 1: {0}", IsDigit(testStrings[0]));
Console.WriteLine("IsDigit String 2: {0}", IsDigit(testStrings[1]));
Console.WriteLine("HandCodeSwitch String 1: {0}", HandCodeSwitch(testStrings[0]));
Console.WriteLine("HandCodeSwitch String 2: {0}", HandCodeSwitch(testStrings[1]));
Console.WriteLine("HandCodeIf String 1: {0}", HandCodeIf(testStrings[0]));
Console.WriteLine("HandCodeIf String 2: {0}", HandCodeIf(testStrings[1]));
Console.WriteLine("RegexDigit String 1: {0}", RegexDigit(testStrings[0]));
Console.WriteLine("RegexDigit String 2: {0}", RegexDigit(testStrings[1]));
Console.WriteLine("IntParse String 1: {0}", IntParse(testStrings[0]));
Console.WriteLine("IntParse String 2: {0}", IntParse(testStrings[1]));
DateTime start, end;
start = DateTime.Now;
for(int i = 0; i < iterations; i++) {
makeSureTheJitDoesNotOptimizeMeOut = IsNumber(testStrings[i%2]);
}
end = DateTime.Now;
Console.WriteLine("IsNumber {0}", end - start);
start = DateTime.Now;
for(int i = 0; i < iterations; i++) {
makeSureTheJitDoesNotOptimizeMeOut = IsDigit(testStrings[i%2]);
}
end = DateTime.Now;
Console.WriteLine("IsDigit {0}", end - start);
start = DateTime.Now;
for(int i = 0; i < iterations; i++) {
makeSureTheJitDoesNotOptimizeMeOut = HandCodeIf(testStrings[i%2]);
}
end = DateTime.Now;
Console.WriteLine("HandCodeIf {0}", end - start);
start = DateTime.Now;
for(int i = 0; i < iterations; i++) {
makeSureTheJitDoesNotOptimizeMeOut = HandCodeSwitch(testStrings[i%2]);
}
end = DateTime.Now;
Console.WriteLine("HandCodeSwitch {0}", end - start);
start = DateTime.Now;
for(int i = 0; i < iterations; i++) {
makeSureTheJitDoesNotOptimizeMeOut = RegexDigit(testStrings[i%2]);
}
end = DateTime.Now;
Console.WriteLine("RegexDigit {0}", end - start);
start = DateTime.Now;
for(int i = 0; i < iterations; i++) {
makeSureTheJitDoesNotOptimizeMeOut = IntParse(testStrings[i%2]);
}
end = DateTime.Now;
Console.WriteLine("IntParse {0}", end - start);
Console.WriteLine(makeSureTheJitDoesNotOptimizeMeOut);
}
public static bool IntParse(string test) {
try {
int.Parse(test);
return true;
} catch { return false; }
}
public static bool HandCodeSwitch(string test) {
for(int i = 0; i < test.Length; i++) {
switch(test[i]) {
case '0':
case '1':
case '2':
case '3':
case '4':
case '5':
case '6':
case '7':
case '8':
case '9':
continue;
default:
return false;
}
}
return true;
}
public static bool HandCodeIf(string test) {
for(int i = 0; i < test.Length; i++) {
if ( test[i] > '9' || test[i] < '0' ) {
return false;
}
}
return true;
}
public static bool IsNumber(string test) {
for(int i = 0; i < test.Length; i++) {
if ( !char.IsNumber(test[i]) ) {
return false;
}
}
return true;
}
public static bool IsDigit(string test) {
for(int i = 0; i < test.Length; i++) {
if ( !char.IsDigit(test[i]) ) {
return false;
}
}
return true;
}
private static Regex matchString = new Regex("^[0-9]+$", RegexOptions.Compiled);
public static bool RegexDigit(string test) {
return matchString.IsMatch(test);
}
}