我试图提出一个表达式,检查给定的整数,如果它的第三位数字从右到左是5。到目前为止,我所做的是:
string input = "5";
if (Regex.IsMatch(input[2].ToString(), "[5]"))
{
System.Console.WriteLine("yes");
}
else
System.Console.WriteLine("no");
有两个问题:
首先从左到右计数,而不是从右到左和第二,当数字小于3位时,返回超出范围异常。
使用数字方式。如果数字大于99并且n
是您的整数,则使用
(n / 100) % 10 == 5
n / 100
删除最后两位数字(整数除法截断),% 10
提取现在最右边的数字。检查是否为5。
将比使用正则表达式快得多。
Bathsheba的答案要好得多,但是如果您想使用正则表达式,我相信这个将满足您的需求:^d+(?:[5](d){2})$
参考@Bathsheba概念,
(n % 1000) / 100 == 5
可以做同样的事情。
(n % 1000)
从右到左最多保持3位
/100
取第三位
是的,RegEx不是我在这里要考虑的东西。既然已经有一个聪明的非转换答案,我就给出最简单的答案,转换为字符串;
if (myInt.ToString().Length >= 3 && myInt.ToString()[2] == '5')
//it's good
else
// it's bad
因为复合表达式在c#中是短路的,所以我可以在同一个if中使用这两个语句,而不用担心会得到IndexOutOfRangeException
既然问题是:
从从右到左的
if (myInt.ToString().Length >= 3 && myInt.ToString()[myInt.ToString().Length - 3] == '5')
//it's good
else
//it's bad
控制台。
long n = long.Parse(Console.ReadLine());
bool result = false;
if ((n % 1000) / 100 == 5)
{
result = true;
}
Console.WriteLine(result);