zoukankan
html css js c++ java
C#中如何判斷一個String是否為數字
Copied From
http://www.cnblogs.com/zm235/archive/2006/09/23/512742.html
方案一:TryCatch(执行效率不高)
private
bool
IsNumberic(
string
oText)
{
try
{
int
var1
=
Convert.ToInt32 (oText);
return
true
;
}
catch
{
return
false
;
}
}
方案二:正则表达式(推荐)
a)
using
System;
using
System.Text.RegularExpressions;
public
bool
IsNumber(String strNumber)
{
Regex objNotNumberPattern
=
new
Regex(
"
[^0-9.-]
"
);
Regex objTwoDotPattern
=
new
Regex(
"
[0-9]*[.][0-9]*[.][0-9]*
"
);
Regex objTwoMinusPattern
=
new
Regex(
"
[0-9]*[-][0-9]*[-][0-9]*
"
);
String strValidRealPattern
=
"
^([-]|[.]|[-.]|[0-9])[0-9]*[.]*[0-9]+$
"
;
String strValidIntegerPattern
=
"
^([-]|[0-9])[0-9]*$
"
;
Regex objNumberPattern
=
new
Regex(
"
(
"
+
strValidRealPattern
+
"
)|(
"
+
strValidIntegerPattern
+
"
)
"
);
return
!
objNotNumberPattern.IsMatch(strNumber)
&&
!
objTwoDotPattern.IsMatch(strNumber)
&&
!
objTwoMinusPattern.IsMatch(strNumber)
&&
objNumberPattern.IsMatch(strNumber);
}
b)
public
static
bool
IsNumeric(
string
value)
{
return
Regex.IsMatch(value,
@"
^[+-]?\d*[.]?\d*$
"
);
}
public
static
bool
IsInt(
string
value)
{
return
Regex.IsMatch(value,
@"
^[+-]?\d*$
"
);
}
public
static
bool
IsUnsign(
string
value)
{
return
Regex.IsMatch(value,
@"
^\d*[.]?\d*$
"
);
}
方案三:遍历
a)
public
bool
isnumeric(
string
str)
{
char
[] ch
=
new
char
[str.Length];
ch
=
str.ToCharArray();
for
(
int
i
=
0
;i
{
if
(ch[i]
<
48
||
ch[i]
>
57
)
return
false
;
}
return
true
;
}
b)
public
bool
IsInteger(
string
strIn)
{
bool
bolResult
=
true
;
if
(strIn
==
""
)
{
bolResult
=
false
;
}
else
{
foreach
(
char
Char
in
strIn)
{
if
(
char
.IsNumber(Char))
continue
;
else
{
bolResult
=
false
;
break
;
}
}
}
return
bolResult;
}
c)
public
static
bool
isNumeric(
string
inString)
{
inString
=
inString.Trim();
bool
haveNumber
=
false
;
bool
haveDot
=
false
;
for
(
int
i
=
0
;i
{
if
(Char.IsNumber(inString[i]))
{
haveNumber
=
true
;
}
else
if
(inString[i]
==
'
.
'
)
{
if
(haveDot)
{
return
false
;
}
else
{
haveDot
=
true
;
}
}
else
if
(i
==
0
)
{
if
(inString[i]
!=
'
+
'
&&
inString[i]
!=
'
-
'
)
{
return
false
;
}
}
else
{
return
false
;
}
if
(i
>
20
)
{
return
false
;
}
}
return
haveNumber;
}
方案四:改写vb的IsNumeric源代码(执行效率不高)
//
主调函数
public
static
bool
IsNumeric(
object
Expression)
{
bool
flag1;
IConvertible convertible1
=
null
;
if
(Expression
is
IConvertible)
{
convertible1
=
(IConvertible) Expression;
}
if
(convertible1
==
null
)
{
if
(Expression
is
char
[])
{
Expression
=
new
string
((
char
[]) Expression);
}
else
{
return
false
;
}
}
TypeCode code1
=
convertible1.GetTypeCode();
if
((code1
!=
TypeCode.String)
&&
(code1
!=
TypeCode.Char))
{
return
Utils.IsNumericTypeCode(code1);
}
string
text1
=
convertible1.ToString(
null
);
try
{
long
num2;
if
(
!
StringType.IsHexOrOctValue(text1,
ref
num2))
{
double
num1;
return
DoubleType.TryParse(text1,
ref
num1);
}
flag1
=
true
;
}
catch
(Exception)
{
flag1
=
false
;
}
return
flag1;
}
//
子函数
//
return Utils.IsNumericTypeCode(code1);
internal
static
bool
IsNumericTypeCode(TypeCode TypCode)
{
switch
(TypCode)
{
case
TypeCode.Boolean:
case
TypeCode.Byte:
case
TypeCode.Int16:
case
TypeCode.Int32:
case
TypeCode.Int64:
case
TypeCode.Single:
case
TypeCode.Double:
case
TypeCode.Decimal:
{
return
true
;
}
case
TypeCode.Char:
case
TypeCode.SByte:
case
TypeCode.UInt16:
case
TypeCode.UInt32:
case
TypeCode.UInt64:
{
break
;
}
}
return
false
;
}
//
-----------------
//
StringType.IsHexOrOctValue(text1, ref num2))
internal
static
bool
IsHexOrOctValue(
string
Value,
ref
long
i64Value)
{
int
num1;
int
num2
=
Value.Length;
while
(num1
<
num2)
{
char
ch1
=
Value[num1];
if
(ch1
==
'
&
'
)
{
ch1
=
char
.ToLower(Value[num1
+
1
], CultureInfo.InvariantCulture);
string
text1
=
StringType.ToHalfwidthNumbers(Value.Substring(num1
+
2
));
if
(ch1
==
'
h
'
)
{
i64Value
=
Convert.ToInt64(text1,
0x10
);
}
else
if
(ch1
==
'
o
'
)
{
i64Value
=
Convert.ToInt64(text1,
8
);
}
else
{
throw
new
FormatException();
}
return
true
;
}
if
((ch1
!=
'
'
)
&&
(ch1
!=
'
\u3000
'
))
{
return
false
;
}
num1
++
;
}
return
false
;
}
//
----------------------------------------------------
//
DoubleType.TryParse(text1, ref num1);
internal
static
bool
TryParse(
string
Value,
ref
double
Result)
{
bool
flag1;
CultureInfo info1
=
Utils.GetCultureInfo();
NumberFormatInfo info3
=
info1.NumberFormat;
NumberFormatInfo info2
=
DecimalType.GetNormalizedNumberFormat(info3);
Value
=
StringType.ToHalfwidthNumbers(Value, info1);
if
(info3
==
info2)
{
return
double
.TryParse(Value, NumberStyles.Any, info2,
out
Result);
}
try
{
Result
=
double
.Parse(Value, NumberStyles.Any, info2);
flag1
=
true
;
}
catch
(FormatException)
{
flag1
=
double
.TryParse(Value, NumberStyles.Any, info3,
out
Result);
}
catch
(Exception)
{
flag1
=
false
;
}
return
flag1;
}
方案五: 直接引用vb运行库(执行效率不高)
方法: 首先需要添加Visualbasic.runtime的引用
代码中Using Microsoft.visualbasic;
程序中用Information.isnumeric(
"
ddddd
"
);
查看全文
相关阅读:
HDU3183 A Magic Lamp —— 贪心(单调队列优化)/ RMQ / 线段树
POJ2559 Largest Rectangle in a Histogram —— 单调栈
Gym
UVALive
POJ2389 —— 高精度乘法
C#实现http协议下载的断点续传
RSA----实际函数库选择
RSA实践指南
AWK第一篇------全面介绍
url语法
原文地址:https://www.cnblogs.com/dimg/p/707338.html
最新文章
Java基础知识强化之IO流笔记10:File类输出指定目录下指定后缀名的文件名称案例(File类的文件过滤器方法改进list( FilenameFilter ff))
Java基础知识强化之IO流笔记09:File类功能
Java基础知识强化之IO流笔记08:异常的注意事项
Java基础知识强化之IO流笔记07:自定义的异常概述和自定义异常实现
Java基础知识强化之IO流笔记06:有return的情况下try catch finally的执行顺序
Java基础知识强化之IO流笔记05:try...catch...finally包含的代码是运行期的
Java基础知识强化之IO流笔记04:throw和throws的区别
Java基础知识强化之IO流笔记03:throws的方式处理异常
Java基础知识强化之IO流笔记02:try...catch的方式处理异常
Java基础知识强化之IO流笔记01:异常的概述和分类
热门文章
Gym
Gym
Gym
Gym
2016 Al-Baath University Training Camp Contest-1 I. March Rain —— 二分
2017广东工业大学程序设计竞赛 E倒水(Water)
Codeforces Round #398 (Div. 2) C. Garland —— DFS
Codeforces Round #371 (Div. 2) C. Sonya and Queries —— 二进制压缩
CSU1808 地铁 —— dijkstra变形
Codeforces Round #222 (Div. 1) Maze —— dfs(连通块)
Copyright © 2011-2022 走看看